Wie lade ich ein Objekt von AWS S3 in den Speicher herunter und sende es per Anfrage in Go?

WBOY
Freigeben: 2024-02-08 20:51:09
nach vorne
841 Leute haben es durchsucht

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

Frageninhalt

Kann mir jemand helfen, diesen Fehler zu beheben, der beim Herunterladen einer Datei von s3 angezeigt wird?

Ich möchte also über Go Gin eine Speicherdienst-API erstellen und eine Route, die einen S3-Objektschlüssel verwendet, um ein Objekt herunterzuladen und dieses Objekt dann an den Client zurückzusenden.

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

// create an amazon s3 service client
s3client := s3.newfromconfig(cfg)
downloader := manager.newdownloader(s3client)
Nach dem Login kopieren
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())

    })
Nach dem Login kopieren

Der obige Code gibt mir diesen Fehler: Operationsfehler s3: getobject, https-Antwortfehlerstatuscode: 403, Anforderungs-ID: 8khyw3rcs2za7d95, Host-ID: kolo+gy/dtzrrovswsb1bxinln8w+xdl0lnmysuwjnhupmbvk4itdfp+mq2xuo8ehasnx/fai4i=, API-Fehler accessdenied: Zugriff verweigert phpcnendc. phpcn</p> <p>Der Anfragetext sieht so aus: </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">Nach dem Login kopieren</div></div> <p>Ich habe alle diese aws_s3_bucket_name, aws_region, aws_access_key_id, aws_secret_access_key in .env-Dateien gespeichert, und ich denke, ich habe sie richtig eingestellt, weil ich eine andere Route habe, die Dateien nach s3 hochlädt (was großartig funktioniert). </p><br/><h2 class="daan">Richtige Antwort</h2><br/><p>Ihr Dateischlüssel ist diese 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">Nach dem Login kopieren</div></div> <p>Dies kann nur von einem http-Client aus verwendet werden, z. B. einem Webbrowser oder Curl. </p> <p>Konkret handelt es sich nicht um einen gültigen S3-Objektschlüssel. Bei Verwendung von getobject oder einer ähnlichen S3-API muss es sich um einen gültigen Schlüssel wie <code>agcies/photo/xyz.pngagcies/photo/xyz.png handeln und darf nicht URL-codiert sein.

Das obige ist der detaillierte Inhalt vonWie lade ich ein Objekt von AWS S3 in den Speicher herunter und sende es per Anfrage in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage