Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk memuat turun objek dari AWS S3 ke dalam memori dan menghantarnya melalui permintaan dalam Go?

Bagaimana untuk memuat turun objek dari AWS S3 ke dalam memori dan menghantarnya melalui permintaan dalam Go?

WBOY
Lepaskan: 2024-02-08 20:51:09
ke hadapan
868 orang telah melayarinya

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

Kandungan soalan

Bolehkah seseorang membantu saya menyelesaikan ralat yang saya perolehi semasa cuba memuat turun fail daripada s3?

Jadi saya ingin mencipta api perkhidmatan storan melalui go gin, dan saya mahu laluan yang menggunakan kunci objek s3 untuk memuat turun objek dan kemudian menghantar objek ini kembali kepada pelanggan.

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

// create an amazon s3 service client
s3client := s3.newfromconfig(cfg)
downloader := manager.newdownloader(s3client)
Salin selepas log masuk
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())

    })
Salin selepas log masuk

Kod di atas memberi saya ralat ini: Ralat operasi s3: getobject, kod status ralat respons https: 403, diminta: 8khyw3rcs2za7d95, hos: kolo+gy/dtzrrovswsb1bxinln8w+xdl0lnmysuwjnhupmbvk4itdfp+mq2xuo4ehais accessed: phpcn</p> <p>Teks permintaan adalah seperti ini: </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">Salin selepas log masuk</div></div> <p>Saya mempunyai semua aws_s3_bucket_name, aws_region, aws_access_key_id, aws_secret_access_key yang disimpan dalam fail .env, dan saya rasa saya telah menetapkannya dengan betul kerana saya mempunyai laluan lain yang memuat naik fail ke s3 (yang berfungsi dengan baik). </p><br/><h2 class="daan">Jawapan betul</h2><br/><p>Kunci fail anda ialah url ini:</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">Salin selepas log masuk</div></div> <p>Ini hanya boleh digunakan daripada klien http, seperti pelayar web atau curl. </p> <p>Secara khusus, ia bukan kunci objek s3 yang sah. Apabila menggunakan getobject atau api s3 yang serupa, ia mestilah kunci yang sah seperti <code>agcies/photo/xyz.pngagcies/photo/xyz.png dan tidak boleh dikodkan url.

Atas ialah kandungan terperinci Bagaimana untuk memuat turun objek dari AWS S3 ke dalam memori dan menghantarnya melalui permintaan dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan