Cantumkan versi objek dalam bucket S3 melalui URI yang ditandatangani

Dalam proyek kami, kami menyimpan objek dalam bucket S3 dengan versi diaktifkan. Tidak ada logika di server selain membuat URI bertanda tangan untuk digunakan klien. Kami ingin tetap seperti ini karena kami ingin klien melakukan semua pemrosesan.

Untuk masalahnya. Kami berhasil membuat URI yang ditandatangani untuk objek GET dan PUT untuk keseluruhan objek, namun kami tidak dapat membuat URI untuk mencantumkan semua versi yang tersedia.

Ini adalah contoh url GET pada objek di salah satu bucket kami yang berfungsi (99/2 adalah folder di dalam bucket): https://bucketname.s3.amazonaws.com/99/2?AWSAccessKeyId=ourkey&Signature=signature&Expires=1410784420

Menurut dokumen (GET versi) kita seharusnya tambahkan ?versions dan versi yang berbeda. Kami telah mencoba yang berikut: https://bucketname.s3.amazonaws.com/99/2?AWSAccessKeyId=ourkey&Signature=signature&Expires=1410784420&versions

Hal ini kemudian mengakibatkan browser mengeluh bahwa tanda tangannya salah, "?versions" hilang. Jika saya membaca docs saya menafsirkannya sebagaimana mestinya' tidak disertakan dalam tanda tangan kecuali kita menambahkan nilai padanya juga, padahal sebenarnya tidak. Masalahnya adalah tidak masalah jika saya menambahkannya ke pembuatan tanda tangan karena masih gagal dengan kesalahan "Tidak ada yang namanya sub-sumber daya ?versi untuk kunci".

Apakah ada seseorang yang berhasil membuat uri bertanda tangan untuk objek guna mencantumkan versinya? Kami sangat ingin mendapatkan petunjuk tentang kesalahan yang kami lakukan! Saya juga ingin menunjukkan bahwa kami tidak menggunakan generator URI bawaan karena kami tidak bisa memenuhi kebutuhan kami.


person Johan    schedule 15.09.2014    source sumber


Jawaban (1)


Mencantumkan versi objek adalah operasi yang dilakukan "terhadap" keranjang, bukan terhadap objek... jadi jalur Anda akan selalu menjadi /, apa pun kunci yang ingin Anda daftarkan.

Anda menentukan awalan kunci dalam string kueri sebagai prefix=....

String yang akan ditandatangani akan dimulai dengan /bucketname/?versions&prefix=....

Anda mengurutkan semua parameter string kueri secara leksikal, kecuali untuk subsumber daya (versions, dalam hal ini), mana yang lebih dulu. Jika ada lebih dari satu sub-sumber daya, Anda juga mengurutkannya secara leksikal di antara sub-sumber daya tersebut, namun sub-sumber daya tersebut tetap berada di urutan pertama. Semuanya dipisahkan oleh & pada string yang akan ditandatangani.

Peringatan penting: daftar api mungkin tidak sesuai untuk diserahkan kepada klien, karena Anda bisa mengembalikan hal yang salah... "awalan" hanya itu -- awalan. Jika tidak sama persis, mungkin cocok dengan substring, yang mungkin bukan yang Anda inginkan. Anda mungkin juga perlu menggunakan delimiter dan max-keys dan bersiap untuk menangani penomoran halaman melalui daftar terpotong yang akan diperlukan ketika sejumlah besar hasil dikembalikan.

http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETVersion.html

http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html

person Michael - sqlbot    schedule 15.09.2014