Maison > développement back-end > Golang > Comment télécharger un objet d'AWS S3 en mémoire et l'envoyer via requête dans Go ?

Comment télécharger un objet d'AWS S3 en mémoire et l'envoyer via requête dans Go ?

WBOY
Libérer: 2024-02-08 20:51:09
avant
875 Les gens l'ont consulté

如何从AWS S3下载对象到内存中并通过Go中的请求发送它?

Contenu de la question

Quelqu'un peut-il m'aider à résoudre cette erreur que je reçois lorsque j'essaie de télécharger un fichier depuis s3 ?

Je souhaite donc créer une API de service de stockage via go gin, et je veux une route qui utilise une clé d'objet s3 pour télécharger un objet, puis renvoyer cet objet au client.

cfg,_ := config.loaddefaultconfig(context.todo())

// create an amazon s3 service client
s3client := s3.newfromconfig(cfg)
downloader := manager.newdownloader(s3client)
Copier après la connexion
router.post("/download-s3", func(ctx *gin.context) {
        var data map[string]string

        if err := ctx.shouldbindjson(&data); err != nil {
            log.println("error: bind error")
            ctx.json(http.statusbadrequest, gin.h{"error": err.error()})
            return
        }

        log.println("body request data (filekey): ", data["filekey"])

        filekey := data["filekey"]

        /// buffer read
        buf := make([]byte, 100)
        // wrap with aws.writeatbuffer
        w := manager.newwriteatbuffer(buf)
        // download file into the memory
        numbytesdownloaded, err := downloader.download(ctx, w, &s3.getobjectinput{
            bucket: aws.string(bucketname),
            key:    aws.string(filekey),
        })
        if err != nil {
            log.println("error: download error")
            ctx.json(http.statusbadrequest, gin.h{"error": err.error()})
            return
        }

        ctx.json(http.statusaccepted,
            gin.h{
                "message":            fmt.sprintf("'%s' downloaded!", "test.jpg"),
                "numbytesdownloaded": numbytesdownloaded,
            },
        )

        ctx.data(http.statusok, "application/octet-stream", w.bytes())

    })
Copier après la connexion

Le code ci-dessus me donne cette erreur : Erreur d'opération s3 : getobject, code d'état d'erreur de réponse https : 403, ID de demande : 8khyw3rcs2za7d95, ID d'hôte : kolo+gy/dtzrrovswsb1bxinln8w+xdl0lnmysuwjnhupmbvk4itdfp+mq2xuo8ehasnx/fai4i=, erreur API accessdenied : accès refusé phpcnendc pcn</p> <p>Le texte de la demande est le suivant : </p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">{ &quot;filekey&quot;: &quot;https://xxx-xxx.s3.ap-southeast-1.amazonaws.com/agencies/photo/06%3A03%3A2023_17%3A42%3A42_gggi_db_er.png&quot; }</pre><div class="contentsignin">Copier après la connexion</div></div> <p>J'ai tous ces aws_s3_bucket_name, aws_region, aws_access_key_id, aws_secret_access_key stockés dans des fichiers .env, et je pense que je les ai définis correctement car j'ai une autre route qui télécharge les fichiers sur s3 (qui fonctionne très bien). </p><br/><h2 class="daan">Bonne réponse</h2><br/><p>Votre clé de fichier est cette URL :</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">&quot;https://xxx-xxx.s3.ap-southeast-1.amazonaws.com/agencies/photo/06%3A03%3A2023_17%3A42%3A42_gggi_db_er.png&quot;</pre><div class="contentsignin">Copier après la connexion</div></div> <p>Cela ne peut être utilisé qu'à partir d'un client http, tel qu'un navigateur Web ou curl. </p> <p>Plus précisément, ce n'est pas une clé d'objet s3 valide. Lorsque vous utilisez getobject ou une API s3 similaire, il doit s'agir d'une clé valide telle que <code>agcies/photo/xyz.pngagcies/photo/xyz.png et ne doit pas être codée en URL.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal