如何在Blob容器中创建子目录
例如,
在我的Blob容器http://veda.blob.core.windows.net/document/
如果我要存储一些文件,它将是这样的:
现在,如何创建一个子目录
以便我可以存储文件
如何在Blob容器中创建子目录
例如,
在我的Blob容器http://veda.blob.core.windows.net/document/
如果我要存储一些文件,它将是这样的:
现在,如何创建一个子目录
以便我可以存储文件
补充一下Egon所说的内容,只需创建名为"folder/1.txt"的blob即可,无需创建目录。
实际上只有一个容器层级。您可以虚拟创建类似“文件系统”的分层存储,但实际上所有内容都将在一个层级中,即它所在的容器中。
为了创建虚拟的“文件系统”存储,您可以使用包含“/”的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
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 示例 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