Microsoft Azure: Cara membuat sub direktori di wadah blob

98

Cara membuat sub direktori dalam wadah blob

sebagai contoh,

dalam wadah blob saya http://veda.blob.core.windows.net/document/

Jika saya menyimpan beberapa file, itu akan

http://veda.blob.core.windows.net/document/1.txt

http://veda.blob.core.windows.net/document/2.txt

Sekarang, bagaimana membuat sub direktori

http://veda.blob.core.windows.net/document/folder/

Agar saya bisa menyimpan file

http://veda.blob.core.windows.net/document/folder/1.txt

veda
sumber

Jawaban:

139

Untuk menambahkan apa yang dikatakan Egon, cukup buat blob Anda yang disebut "folder / 1.txt", dan itu akan berfungsi. Tidak perlu membuat direktori.

pengguna94559
sumber
3
bagaimana Anda memfilter atau mendapatkan semua file ini dari "folder"?
afr0
2
Ini tidak berfungsi untuk saya, kata wadah tidak dapat menggunakan apa pun kecuali huruf kecil, tanda hubung, angka. Sama untuk nama file
Green_qaue
@Green_qaue Anda harus menggunakan hanya huruf kecil dan angka untuk menamai wadah / direktori Anda dan itulah mengapa Anda mendapat kesalahan.
Sapan Ghafuri
1
itu membuat beberapa direktori dengan folder yang sama, maksud saya setiap kali saya mengunggah file, itu membuat direktori yang disebut "folder" lagi, apakah ada metode untuk memeriksa apakah folder itu ada sehingga tidak boleh membuatnya?
amal50
@SapanGhafuri ini tidak benar, Anda dapat membuat direktori yang berisi karakter huruf besar
codah
36

Sebenarnya hanya ada satu lapisan wadah. Anda secara virtual dapat membuat "sistem file" seperti penyimpanan berlapis, tetapi pada kenyataannya semuanya akan berada dalam 1 lapisan, wadah tempatnya berada.

Untuk membuat "sistem file" virtual seperti penyimpanan, Anda dapat memiliki nama blob yang berisi '/' sehingga Anda dapat melakukan apa pun yang Anda suka dengan cara menyimpan. Selain itu, hal yang hebat adalah Anda dapat mencari blob di tingkat virtual, dengan memberikan string parsial, hingga '/'.

2 hal ini, menambahkan '/' ke jalur dan string parsial untuk pencarian, bersama-sama membuat penyimpanan "sistem file" virtual.

Egon
sumber
Bisakah Anda membagikan sampel C #? blob.Nama adalah properti hanya baca jadi kami tidak dapat membuat blob.Nama dengan "/"
ABB
34

Ada komentar dari @ afr0 yang menanyakan cara memfilter folder ..

Ada dua cara menggunakan GetDirectoryReferenceor looping melalui wadah blob dan memeriksa tipenya. Kode di bawah ini ada di C #

CloudBlobContainer container = blobClient.GetContainerReference("photos");

//Method 1. grab a folder reference directly from the container
CloudBlobDirectory folder = container.GetDirectoryReference("directoryName");

//Method 2. Loop over container and grab folders.
foreach (IListBlobItem item in container.ListBlobs(null, false))
{
    if (item.GetType() == typeof(CloudBlobDirectory))
    {
        // we know this is a sub directory now
        CloudBlobDirectory subFolder = (CloudBlobDirectory)item;

        Console.WriteLine("Directory: {0}", subFolder.Uri);
    }
}

baca ini untuk liputan yang lebih mendalam: http://www.codeproject.com/Articles/297052/Azure-Storage-Blobs-Service-Working-with-Directori

AntonB
sumber
1
Ini harus menjadi jawaban pada tanggal hari ini. +1
MickyD
2
Ini info yang bagus tetapi apakah itu menjawab 'Bagaimana cara membuat sub direktori dalam wadah blob'?
codah
20

Di Azure Portal kami memiliki opsi di bawah ini saat mengunggah file:

masukkan deskripsi gambar di sini

Pritam
sumber
6

Jika Anda menggunakan Microsoft Azure Storage Explorer , terdapat tombol "Folder Baru" yang memungkinkan Anda membuat folder dalam wadah. Ini sebenarnya adalah folder virtual:

masukkan deskripsi gambar di sini

Setyo N
sumber
5

Anda tidak perlu membuat sub direktori. Hanya membuat wadah gumpalan dan nama file digunakan seperti variabel nama file seperti di bawah kode:

string filename = "document/tech/user-guide.pdf";
CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(ConnectionString);
CloudBlockBlob blob = cloudBlobContainer.GetBlockBlobReference(filename);
blob.StreamWriteSizeInBytes = 20 * 1024;
blob.UploadFromStream(fileStream); // fileStream is System.IO.Stream
Khabir
sumber
2

Seperti yang disebutkan @Egon di atas, tidak ada pengelolaan folder nyata dalam penyimpanan BLOB.

Anda dapat memperoleh beberapa fitur sistem file menggunakan '/' pada nama file, tetapi ini memiliki banyak batasan (misalnya, apa yang terjadi jika Anda perlu mengganti nama "folder"?).

Sebagai aturan umum, saya akan menyimpan file saya serata mungkin dalam wadah, dan meminta aplikasi saya mengelola struktur apa pun yang ingin saya tunjukkan kepada pengguna akhir (misalnya mengelola struktur folder bersarang dalam database saya , memiliki catatan untuk masing-masing file, mereferensikan BLOB menggunakan nama-kontainer dan nama-file).

Assaf S.
sumber
1

Mendapat masalah serupa saat mencoba Azure Sample first-serverless-app .
Berikut adalah info tentang bagaimana saya menyelesaikan dengan menghapus \ di depan $ web.

Catatan: $ web container dibuat secara otomatis sambil mengaktifkan situs statis. Tidak pernah melihat $ root container di mana pun.

//getting Invalid URI error while following tutorial as-is
az storage blob upload-batch -s . -d \$web --account-name firststgaccount01

//Remove "\" @destination param
az storage blob upload-batch -s . -d $web --account-name firststgaccount01
Nara
sumber
-2

Inilah cara saya melakukannya di CoffeeScript di Node.JS:

blobService.createBlockBlobFromText 'containerName', (path + '$$$.$$$'), '', (err, result)->
    if err
        console.log 'failed to create path', err
    else
        console.log 'created path', path, result
Cees Timmerman
sumber
4
Pertanyaan tersebut ditandai sebagaiC#
Rafael Herscovici
@ Dementic Oleh karena itu saya menyebutkan CoffeeScript, yang hanya JavaScript tanpa cruft. Seharusnya tidak terlalu sulit untuk melakukan port ke C #, terutama dibandingkan dengan jawaban yang diterima yang bahkan tidak ada dalam bahasa pemrograman.
Cees Timmerman