[英]In Azure Blob container, How to delete all files by name under a directory?
[英]Microsoft Azure: How to create sub directory in a blob container
如何在 blob 容器中創建子目錄
例如,
在我的 blob 容器中http://veda.blob.core.windows.net/document/
如果我存儲一些文件,它將是
現在,如何創建子目錄
這樣我就可以存儲文件
要補充 Egon 所說的內容,只需創建名為“folder/1.txt”的 blob,它就會起作用。 無需創建目錄。
實際上只有一層容器。 您可以虛擬地創建類似於分層存儲的“文件系統”,但實際上一切都將在 1 層中,即它所在的容器。
為了創建像存儲這樣的虛擬“文件系統”,您可以使用包含“/”的 blob 名稱,以便您可以按照您的存儲方式執行任何您喜歡的操作。 此外,最棒的是您可以在虛擬級別搜索 blob,方法是提供部分字符串,最多為“/”。
這兩件事,將“/”添加到路徑和用於搜索的部分字符串,共同創建了一個虛擬的“文件系統”存儲。
@afr0 有一條評論詢問如何過濾文件夾..
有兩種方法可以使用GetDirectoryReference
或循環遍歷容器 blob 並檢查類型。 下面的代碼是在 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
如果您使用Microsoft Azure 存儲資源管理器,則有一個“新建文件夾”按鈕可讓您在容器中創建文件夾。 這實際上是一個虛擬文件夾:
您不需要創建子目錄。 只需創建 blob 容器並使用文件名,如變量文件名,如下代碼:
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
對於那些在動態目錄中苦苦掙扎的人
根據版本 12
<PackageReference Include="Azure.Storage.Blobs" Version="12.10.0"/>
您可以輕松地使用反斜杠分隔目錄或文件夾路徑。 在這種情況下,它們將自動創建。 例子:
public async Task UploadFile(string env, string filePath, string filename, Guid companyId, Guid assetId, string baseKey)
{
var blobContainer = blobServiceClient.GetBlobContainerClient("graphs-data");
if (!blobContainer.Exists())
{
blobContainer.Create();
}
var blobClient = blobContainer.GetBlobClient($"input/{env}/{companyId}/iotasset/{assetId}/{baseKey}/{filename}");
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
await blobClient.UploadAsync(fs, overwrite: true);
}
正如@Egon 上面提到的,BLOB 存儲中沒有真正的文件夾管理。
您可以使用文件名中的“/”來實現文件系統的某些功能,但這有很多限制(例如,如果您需要重命名“文件夾”會發生什么?)。
作為一般規則,我會將我的文件盡可能地保持在容器中,並讓我的應用程序管理我想要向最終用戶公開的任何結構(例如管理我的數據庫中的嵌套文件夾結構,為每個文件,使用容器名和文件名引用 BLOB)。
嘗試 Azure Sample first-serverless-app 時遇到類似問題。
這是我如何通過刪除 $web 前面的 \\ 來解決的信息。
注意:$web 容器是在啟用靜態網站時自動創建的。 從未在任何地方見過 $root 容器。
//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
我需要從 Jenkins 管道執行此操作,因此,需要將文件上傳到特定文件夾名稱而不是根容器文件夾。 我使用 --destination-path 可以是文件夾或文件夾 1 /文件夾 2
az storage blob upload-batch --account-name $AZURE_STORAGE_ACCOUNT --destination ${CONTAINER_NAME} --destination-path ${VERSION_FOLDER} --source ${BUILD_FOLDER} --account-key $ACCESS_KEY
希望這對某人有幫助
沒有直接選項來創建文件夾/目錄。 但是,如果您希望將某些內容上傳到文件夾,那么在上傳文件時您需要在高級部分下傳遞文件夾名稱。 例如,如果我想將圖像上傳到名為文件夾的資產,那么我的上傳窗口將如下所示。 在此處輸入圖片說明
這將創建一個文件夾名稱資產並將文件上傳到該文件夾。 需要注意的是文件夾名和文件名是區分大小寫的。
使用 Python 查看此功能的視頻演示: https://youtu.be/Bnrargw-eM0
C#而不是上面接受的英文:
CloudBlobContainer container = new CloudBlobContainer(new Uri(sasUri));
CloudBlockBlob blob = container.GetBlockBlobReference(filePathInSyncFolder);
LocalFileSysAccess.LocalFileSys uploadfromFile = new LocalFileSysAccess.LocalFileSys();
uploadfromFile.uploadfromFilesystem(blob, localFilePath, eventType);
在我看來,Node.JS 上的 CoffeeScript 更簡單:
blobService.createBlockBlobFromText 'containerName', (path + '$$$.$$$'), '', (err, result)->
if err
console.log 'failed to create path', err
else
console.log 'created path', path, result
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.