如何在 blob 容器中创建子目录
例如,
在我的 blob 容器中http://veda.blob.core.windows.net/document/
如果我存储一些文件,它将是
现在,如何创建子目录
这样我就可以存储文件
如何在 blob 容器中创建子目录
例如,
在我的 blob 容器中http://veda.blob.core.windows.net/document/
如果我存储一些文件,它将是
现在,如何创建子目录
这样我就可以存储文件
要补充 Egon 所说的内容,只需创建名为“folder/1.txt”的 blob,它就会起作用。无需创建目录。
实际上只有一层容器。您可以虚拟地创建像分层存储一样的“文件系统”,但实际上所有内容都将位于 1 层,即它所在的容器中。
为了创建像存储这样的虚拟“文件系统”,您可以使用包含“/”的 blob 名称,这样您就可以使用您的存储方式做任何您喜欢的事情。此外,最棒的是,您可以在虚拟级别搜索 blob,方法是提供部分字符串,最多为 '/'。
这两件事,将“/”添加到路径和用于搜索的部分字符串,共同创建了一个虚拟的“文件系统”存储。
@afr0 有一条评论询问如何过滤文件夹..
有两种方法使用GetDirectoryReference
or 循环容器 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
您不需要创建sub directory
. 只需创建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
如果您使用Microsoft Azure 存储资源管理器,则有一个“新建文件夹”按钮,可让您在容器中创建文件夹。这实际上是一个虚拟文件夹:
正如上面提到的@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
对于在动态目录中苦苦挣扎的
人根据版本 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);
}
没有创建文件夹/目录的直接选项。但是,如果您想将某些内容上传到文件夹,那么在上传文件时,您需要在高级部分下传递文件夹名称。例如,如果我想将图像上传到名为文件夹的资产,那么我的上传窗口将如下所示。在此处输入图像描述
这将创建一个文件夹名称资产并将文件上传到该文件夹。需要注意的是文件夹名和文件名区分大小写。
我需要从 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
希望这对某人有帮助
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