Microsoft Azure: วิธีสร้างไดเรกทอรีย่อยในคอนเทนเนอร์หยด


98

วิธีสร้างไดเร็กทอรีย่อยใน blob container

ตัวอย่างเช่น,

ในคอนเทนเนอร์ blob ของฉันhttp://veda.blob.core.windows.net/document/

ถ้าเก็บไฟล์บางไฟล์ก็จะเป็น

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

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

ตอนนี้วิธีสร้างไดเรกทอรีย่อย

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

เพื่อให้ฉันสามารถจัดเก็บไฟล์

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

คำตอบ:


139

หากต้องการเพิ่มสิ่งที่ Egon กล่าวเพียงแค่สร้างหยดของคุณชื่อ "โฟลเดอร์ / 1.txt" และจะใช้งานได้ ไม่ต้องสร้างไดเร็กทอรี


3
คุณกรองหรือรับไฟล์เหล่านี้จาก "โฟลเดอร์" ได้อย่างไร?
afr0

2
สิ่งนี้ไม่ได้ผลสำหรับฉันคอนเทนเนอร์กล่าวว่าไม่สามารถใช้อะไรได้เลยนอกจากตัวพิมพ์เล็กยัติภังค์ตัวเลข เหมือนกันสำหรับชื่อไฟล์
Green_qaue

@Green_qaue คุณต้องใช้เฉพาะตัวอักษรพิมพ์เล็กและตัวเลขในการตั้งชื่อคอนเทนเนอร์ / ไดเรกทอรีของคุณและนั่นคือสาเหตุที่คุณพบข้อผิดพลาด
Sapan Ghafuri

1
มันสร้างหลายไดเร็กทอรีด้วยโฟลเดอร์เดียวกันฉันหมายถึงทุกครั้งที่อัปโหลดไฟล์มันจะสร้างไดเร็กทอรีชื่อ "โฟลเดอร์" อีกครั้งมีวิธีใดในการตรวจสอบว่ามีโฟลเดอร์อยู่หรือไม่จึงไม่ควรสร้างขึ้น
amal50

@SapanGhafuri นี่ไม่เป็นความจริงคุณสามารถสร้างไดเร็กทอรีที่มีอักขระตัวพิมพ์ใหญ่
codah

36

จริงๆมีเพียงชั้นเดียวของตู้คอนเทนเนอร์ คุณสามารถสร้าง "ระบบไฟล์" ได้เหมือนที่จัดเก็บข้อมูลแบบเลเยอร์ แต่ในความเป็นจริงแล้วทุกอย่างจะอยู่ใน 1 เลเยอร์ซึ่งเป็นคอนเทนเนอร์ที่อยู่

สำหรับการสร้าง "ระบบไฟล์" เสมือนเช่นพื้นที่จัดเก็บคุณสามารถตั้งชื่อหยดที่มีเครื่องหมาย "/" เพื่อให้คุณสามารถทำอะไรก็ได้ตามที่คุณต้องการด้วยวิธีการจัดเก็บ นอกจากนี้สิ่งที่ยอดเยี่ยมคือคุณสามารถค้นหาหยดในระดับเสมือนได้โดยให้สตริงบางส่วนสูงถึง '/'

2 สิ่งนี้คือการเพิ่ม '/' ลงในพา ธ และสตริงบางส่วนสำหรับการค้นหาร่วมกันสร้างที่เก็บ "file-system" เสมือน


คุณสามารถแบ่งปันตัวอย่าง C # ได้หรือไม่? blob ชื่อนี้อ่านได้เฉพาะคุณสมบัติดังนั้นเราจึงไม่สามารถสร้าง blob ได้ชื่อด้วย "/"
ABB

34

มีความคิดเห็นโดย @ afr0 ถามวิธีกรองโฟลเดอร์ ..

มีสองวิธีในการใช้GetDirectoryReferenceหรือวนลูปผ่านคอนเทนเนอร์และตรวจสอบประเภท รหัสด้านล่างอยู่ใน 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);
    }
}

อ่านข้อมูลในเชิงลึกเพิ่มเติม: http://www.codeproject.com/Articles/297052/Azure-Storage-Blobs-Service-Working-with-Directori


1
นี่น่าจะเป็นคำตอบ ณ วันนี้ +1
มิกกี้ด

2
เป็นข้อมูลที่ดี แต่ตอบว่า 'วิธีสร้างไดเรกทอรีย่อยในคอนเทนเนอร์หยด' หรือไม่?
codah



5

คุณไม่จำเป็นต้องสร้างไดเรกทอรีย่อย เพียงสร้าง blob container และใช้ชื่อไฟล์เช่นชื่อไฟล์ตัวแปรตามโค้ดด้านล่าง:

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 ได้กล่าวไว้ข้างต้นไม่มีการจัดการโฟลเดอร์จริงในที่เก็บข้อมูล BLOB

คุณสามารถบรรลุคุณสมบัติบางอย่างของระบบไฟล์โดยใช้ '/' ในชื่อไฟล์ แต่สิ่งนี้มีข้อ จำกัด หลายประการ (ตัวอย่างเช่นจะเกิดอะไรขึ้นหากคุณต้องการเปลี่ยนชื่อ "โฟลเดอร์")

ตามกฎทั่วไปฉันจะเก็บไฟล์ของฉันให้แบนที่สุดเท่าที่จะเป็นไปได้ในคอนเทนเนอร์และให้แอปพลิเคชันของฉันจัดการโครงสร้างใด ๆ ที่ฉันต้องการเปิดเผยต่อผู้ใช้ปลายทาง (เช่นจัดการโครงสร้างโฟลเดอร์ที่ซ้อนกันในฐานข้อมูลของฉันมีบันทึกสำหรับแต่ละ ไฟล์อ้างอิง BLOB โดยใช้ชื่อคอนเทนเนอร์และชื่อไฟล์)


1

มีปัญหาที่คล้ายกันในขณะที่พยายาม Azure ตัวอย่างแรก serverless แอป
นี่คือข้อมูลเกี่ยวกับวิธีที่ฉันแก้ไขโดยการลบ \ ที่ด้านหน้า $ web

หมายเหตุ: $ web container ถูกสร้างขึ้นโดยอัตโนมัติขณะเปิดใช้งานเว็บไซต์แบบคงที่ ไม่เคยเห็น $ root container ที่ไหนเลย

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

นี่คือวิธีที่ฉันทำใน CoffeeScript บน Node.JS:

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

4
คำถามถูกแท็กว่าC#
Rafael Herscovici

@Dementic ดังนั้นการพูดถึง CoffeeScript ของฉันซึ่งเป็นเพียง JavaScript โดยไม่มีข้อผิดพลาด ไม่ควรยากเกินไปที่จะพอร์ตไปที่ C # โดยเฉพาะอย่างยิ่งเมื่อเทียบกับคำตอบที่ยอมรับซึ่งไม่ได้อยู่ในภาษาโปรแกรม
Cees Timmerman
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.