Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk memuat turun objek dari AWS S3 ke dalam memori dan menghantarnya melalui permintaan dalam Go?
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)
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()) })
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
Teks permintaan adalah seperti ini:
{ "filekey": "https://xxx-xxx.s3.ap-southeast-1.amazonaws.com/agencies/photo/06%3A03%3A2023_17%3A42%3A42_gggi_db_er.png" }
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).
Kunci fail anda ialah url ini:
"https://xxx-xxx.s3.ap-southeast-1.amazonaws.com/agencies/photo/06%3A03%3A2023_17%3A42%3A42_gggi_db_er.png"
Ini hanya boleh digunakan daripada klien http, seperti pelayar web atau curl.
Secara khusus, ia bukan kunci objek s3 yang sah. Apabila menggunakan getobject atau api s3 yang serupa, ia mestilah kunci yang sah seperti agcies/photo/xyz.png
agcies/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!