Saya memiliki file yang disimpan di S3 dengan GUID sebagai nama kuncinya.
Saya menggunakan URL yang telah ditandatangani sebelumnya untuk mengunduh sesuai dengan S3 REST API
Saya menyimpan nama file asli di Database saya sendiri. Ketika pengguna mengklik untuk mengunduh file dari aplikasi web saya, saya ingin mengembalikan nama file aslinya, tetapi saat ini yang mereka dapatkan hanyalah GUID . Bagaimana saya bisa mencapai ini?
Aplikasi web saya ada di bagian penjualan jadi saya tidak memiliki banyak kendali untuk melakukan respons. Mengalihkan semua mengunduh file ke server web lalu mengganti namanya karena batasan gubernur.
Apakah ada beberapa pengalihan HTML, penyegaran meta, Javascript yang dapat saya gunakan? Apakah ada cara untuk mengubah nama file unduhan untuk S3 (satu-satunya hal yang dapat saya pikirkan adalah mengatasi objek ke nama baru, mengunduhnya, lalu menghapusnya).
Saya ingin menghindari pembuatan keranjang per pengguna karena kita akan memiliki banyak pengguna dan tetap tidak ada jaminan setiap file yang ada di setiap keranjang akan memiliki nama yang unik
Ada solusi lain?
Jawaban:
Saya kira salib Anda memposting pertanyaan ini ke forum Amazon S3 , tetapi demi orang lain saya ingin memposting jawabannya di sini:
Jika hanya ada satu "nama file pengguna" untuk setiap objek S3, maka Anda dapat mengatur header Content-Disposition pada file s3 Anda untuk mengatur nama file download: Content-Disposition: attachment; filename = foo.bar
Demi keadilan, saya ingin menyampaikan bahwa bukan saya yang memberikan jawaban yang benar di forum Amazon dan semua kredit harus diberikan kepada Colin Rhodes ;-)
sumber
https://...example.txt?response-content-disposition=attachment;filename=foo.bar
Meskipun jawaban yang diterima benar, saya merasa sangat abstrak dan sulit untuk digunakan.
Berikut adalah potongan kode node.js yang memecahkan masalah yang disebutkan. Saya menyarankan untuk menjalankannya sebagai AWS Lambda untuk menghasilkan Url yang sudah ditandatangani sebelumnya.
Harap perhatikan
ResponseContentDisposition
atributparams
objek yang dilewatkan ke dalams3.getSignedUrl
fungsi.Informasi lebih lanjut di bawah dokumen fungsi getObject di http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getObject-property
sumber
originalFilename
parameter as.Pada awal Januari 2011 S3 menambahkan penggantian header permintaan. Fungsionalitas ini memungkinkan Anda untuk 'secara dinamis' mengubah header Content-Disposition untuk setiap permintaan.
Lihat dokumentasi S3 tentang mendapatkan objek untuk lebih jelasnya.
sumber
Dengan C # menggunakan AWSSDK,
sumber
Untuk Java AWS SDK di bawah Code Snippet harus melakukan pekerjaan:
sumber
Saya memiliki masalah yang sama, saya menyelesaikannya dengan mengatur http header "content-disposition" saat mengirimkan file ke S3, versi SDK adalah AWS SDK untuk PHP 3.x. berikut adalah dokumennya http://docs.amazonaws.cn/en_us/aws-sdk-php/latest/api-s3-2006-03-01.html#putobject
sepotong kode saya
sumber
Sepertinya: response_content_disposition tidak terdokumentasi dalam metode presigned_url. Inilah yang berhasil bagi saya
sumber
Menggunakan python dan boto v2:
sumber