Microsoft Azure: Bir blob kapsayıcısında alt dizin oluşturma


98

Bir blob kapsayıcısında alt dizin oluşturma

Örneğin,

blob kapsayıcımda http://veda.blob.core.windows.net/document/

Bazı dosyaları saklarsam,

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

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

Şimdi, bir alt dizin nasıl oluşturulur

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

Böylece dosyaları saklayabilirim

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

Yanıtlar:


139

Egon'un söylediklerine eklemek için, "klasör / 1.txt" adlı blobunuzu oluşturmanız yeterlidir, işe yarayacaktır. Bir dizin oluşturmanıza gerek yok.


3
Tüm bu dosyaları "klasörden" nasıl filtreler veya alırsınız?
afr0

2
Bu benim için işe yaramıyor, diyor konteynerler küçük harf, tire ve sayılardan başka bir şey kullanamaz. Dosya adları için aynı
Green_qaue

@Green_qaue, kapsayıcınızı / dizinlerinizi adlandırmak için yalnızca küçük harf ve rakam kullanmanız gerekir ve bu nedenle hatalar alırsınız.
Sapan Ghafuri

1
aynı klasörle birkaç dizin oluşturur, yani her dosya yüklediğimde, yeniden "klasör" adlı bir dizin oluşturur, klasörün var olup olmadığını kontrol etmek için herhangi bir yöntem var mı, böylece onu oluşturmasın?
amal50

@SapanGhafuri bu doğru değil, büyük harf karakterleri içeren dizinler oluşturabilirsiniz
codah

36

Aslında sadece tek bir kap tabakası var. Katmanlı depolama gibi neredeyse bir "dosya sistemi" oluşturabilirsiniz, ancak gerçekte her şey, içinde bulunduğu kap olan 1 katman içinde olacaktır.

Depolama gibi sanal bir "dosya sistemi" oluşturmak için, "/" içeren blob adlarına sahip olabilirsiniz, böylece depolama şeklinizle istediğinizi yapabilirsiniz. Ayrıca, harika olan şey, '/' değerine kadar kısmi bir dize vererek sanal düzeyde bir blob arayabilmenizdir.

Bir yola '/' ve arama için kısmi bir dize ekleyen bu 2 şey, birlikte sanal bir "dosya sistemi" deposu oluşturur.


C # örneğini paylaşabilir misiniz? blob.Ad salt okunur özelliktir, bu nedenle bir blob oluşturamıyoruz. "/" ile bir blob. Ad
ABB

34

@ Afr0 tarafından klasörlere nasıl filtre uygulanacağını soran bir yorum var ..

GetDirectoryReferenceKapsayıcı bloblarını veya döngülerini kullanmanın ve türünü kontrol etmenin iki yolu vardır . Aşağıdaki kod C # dilinde

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);
    }
}

daha ayrıntılı bilgi için bunu okuyun: http://www.codeproject.com/Articles/297052/Azure-Storage-Blobs-Service-Working-with-Directori


1
Bugünün tarihi itibariyle cevap bu olmalı. +1
MickyD

2
Bu iyi bir bilgi ancak 'Bir blob kapsayıcısında alt dizin nasıl oluşturulur' yanıtını veriyor mu?
codah

20

Azure Portal'da dosya yüklerken aşağıdaki seçeneğe sahibiz:

görüntü açıklamasını buraya girin



5

Alt dizin oluşturmanıza gerek yoktur. Sadece blob kapsayıcısı oluşturun ve aşağıdaki kod gibi değişken dosya adı gibi dosya adını kullanın :

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

2

@Egon yukarıda belirtildiği gibi, BLOB depolamada gerçek bir klasör yönetimi yoktur.

Dosya adında '/' kullanarak bir dosya sisteminin bazı özelliklerini elde edebilirsiniz, ancak bunun birçok sınırlaması vardır (örneğin, bir "klasörü" yeniden adlandırmanız gerekirse ne olur?).

Genel bir kural olarak, dosyalarımı bir kapsayıcıda olabildiğince düz tutardım ve son kullanıcılara göstermek istediğim her yapıyı uygulamamın yönetmesini isterim (örneğin , veritabanımdaki iç içe klasör yapısını yönetmek , her biri için bir kayıt bulundurmak) dosya, kapsayıcı adı ve dosya adı kullanarak BLOB'a referans verir).


1

Azure Sample ilk sunucusuz uygulamayı denerken benzer bir sorunla karşılaştım .
$ Web'in önünde \ atarak nasıl çözdüğümle ilgili bilgi burada.

Not: Statik web sitesi etkinleştirilirken $ web konteyneri otomatik olarak oluşturuldu. Hiçbir yerde $ root kapsayıcı görmedim.

//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

-2

Node.JS'de CoffeeScript'te bunu şu şekilde yapıyorum:

blobService.createBlockBlobFromText 'containerName', (path + '$$$.$$$'), '', (err, result)->
    if err
        console.log 'failed to create path', err
    else
        console.log 'created path', path, result

4
Soru şu şekilde etiketlendiC#
Rafael Herscovici

@Dementic Bu nedenle, hiçbir zaaf olmadan JavaScript olan CoffeeScript'ten söz ediyorum. Özellikle bir programlama dilinde bile olmayan kabul edilen yanıtla karşılaştırıldığında, C # 'a bağlamak çok zor olmamalı.
Cees Timmerman
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.