Saya punya pertanyaan yang sangat sederhana (saya harap!) - Saya hanya ingin mencari tahu apakah gumpalan (dengan nama yang saya definisikan) ada di wadah tertentu. Saya akan mengunduhnya jika memang ada, dan jika tidak, saya akan melakukan hal lain.
Saya telah melakukan beberapa pencarian di intertubes dan tampaknya dulu ada fungsi yang disebut DoesExist atau yang serupa ... tetapi karena dengan begitu banyak Azure API, ini tampaknya tidak lagi ada di sana (atau jika ada, memiliki nama yang sangat cerdik).
c#
azure
azure-blob-storage
John
sumber
sumber
Jawaban:
API baru memiliki panggilan fungsi .Exists (). Pastikan Anda menggunakan
GetBlockBlobReference
, yang tidak melakukan panggilan ke server. Itu membuat fungsinya semudah:sumber
len(blob_service.list_blobs(container_name, file_name)) > 0
Catatan: Jawaban ini sudah usang sekarang. Silakan lihat jawaban Richard untuk cara mudah memeriksa keberadaan
Tidak, Anda tidak melewatkan sesuatu yang sederhana ... kami melakukan pekerjaan yang baik untuk menyembunyikan metode ini di pustaka StorageClient baru. :)
Saya baru saja menulis posting blog untuk menjawab pertanyaan Anda: http://blog.smarx.com/posts/testing-existence-of-a-windows-azure-blob .
Jawaban singkatnya adalah: gunakan CloudBlob.FetchAttributes (), yang melakukan permintaan HEAD terhadap gumpalan.
sumber
OpenRead
itu tidak akan membuang atau mengembalikan Stream kosong atau semacamnya. Anda hanya akan mendapatkan kesalahan saat mulai mengunduh darinya. Jauh lebih mudah menangani semua ini di satu tempat :)Tampaknya lumpuh bahwa Anda perlu menangkap pengecualian untuk mengujinya gumpalan itu ada.
sumber
Jika gumpalan itu bersifat publik, Anda dapat, tentu saja, hanya mengirim permintaan HTTP HEAD - dari berbagai bahasa / lingkungan / platform yang mengetahui bagaimana melakukannya - dan memeriksa responsnya.
API Azure inti adalah antarmuka HTTP berbasis XML yang tenang. Perpustakaan StorageClient adalah salah satu dari banyak pembungkus di sekitarnya. Berikut ini yang dilakukan Sriram Krishnan dengan Python:
http://www.sriramkrishnan.com/blog/2008/11/python-wrapper-for-windows-azure.html
Ini juga menunjukkan cara mengotentikasi di tingkat HTTP.
Saya telah melakukan hal yang sama untuk diri saya sendiri di C #, karena saya lebih suka melihat Azure melalui lensa HTTP / REST daripada melalui lensa perpustakaan StorageClient. Untuk beberapa waktu saya bahkan tidak repot-repot menerapkan metode ExistsBlob. Semua gumpalan saya bersifat publik, dan itu sepele untuk melakukan HTTP HEAD.
sumber
Windows Azure Storage Library baru sudah berisi metode Exist (). Ada di Microsoft.WindowsAzure.Storage.dll.
Tersedia sebagai Paket NuGet
Dibuat oleh: Microsoft
Id: WindowsAzure.
Versi Penyimpanan: 2.0.5.1
Lihat juga msdn
sumber
Jika Anda tidak suka menggunakan metode pengecualian, maka versi dasar c # yang disarankan judell ada di bawah ini. Namun berhati-hatilah bahwa Anda benar-benar harus menangani kemungkinan tanggapan lain juga.
sumber
Jika gumpalan Anda bersifat publik dan Anda hanya perlu metadata:
sumber
Dengan SDK yang diperbarui, begitu Anda memiliki CloudBlobReference, Anda dapat memanggil Exists () pada referensi Anda.
Lihat http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storage.blob.cloudblockblob.exists.aspx
sumber
Ini adalah cara saya melakukannya. Menampilkan kode lengkap untuk mereka yang membutuhkannya.
sumber
Meskipun sebagian besar jawaban di sini benar secara teknis, sebagian besar contoh kode membuat panggilan sinkron / memblokir. Kecuali Anda terikat oleh platform atau basis kode yang sangat lama, panggilan HTTP harus selalu dilakukan secara asinkron, dan SDK mendukung sepenuhnya dalam hal ini. Cukup gunakan
ExistsAsync()
sajaExists()
.sumber
Exists()
sinkron karena memblokir utas sampai selesai.await ExistsAscyn()
asinkron karena tidak. Keduanya mengikuti alur logis yang sama di mana baris kode berikutnya tidak dimulai sampai yang sebelumnya selesai, tetapi sifat nonblockingExistsAsync
yang membuatnya asinkron.Inilah solusi yang berbeda jika Anda tidak menyukai solusi yang lain:
Saya menggunakan paket NuGet Azure.Storage.Blobs versi 12.4.1.
Saya mendapatkan objek Azure.Pageable yang merupakan daftar semua gumpalan dalam sebuah wadah. Saya kemudian memeriksa apakah nama BlobItem sama dengan properti Name dari masing-masing gumpalan di dalam wadah menggunakan LINQ . (Jika semuanya valid, tentu saja)
Semoga ini membantu seseorang di masa depan.
sumber