如何将文件夹上传到Blob存储?

26

我有一个工作角色用于从 Blob 存储 OnStart 中拉取数据。目前,我通过上传 test.txt 文件并将其下载到本地目录进行测试,一切都运行良好。

现在,我想上传一个文件夹到 Blob 存储。该文件夹包含一个批处理脚本以及批处理脚本调用的多个可执行文件。

有什么推荐的方法可以实现这一点?我认为将文件夹压缩成 *.zip 文件会很容易...但是,一旦我将其下载到本地供工作角色处理,如何在没有任何第三方库的情况下解压缩它呢?

如果有更好的选择,我愿意接受任何建议。感谢您的帮助 - 在我加速学习的过程中,这个社区已经帮了我很大的忙 :)


为什么不直接上传单个文件呢?存储成本很低。 - paparazzo
我应该注意到还有一个包含数百个文件和其他文件夹的项目文件夹。我希望能够下载容器的所有内容,同时保留文件夹、文件名等信息。这是否可能? - RobVious
请定义“pull data down”。您需要这些工作角色,还是需要将这些文件下载到客户端?或者还有其他需求吗? - paparazzo
我需要这些文件用于工作角色。对我来说最简单的方法是使用CloudXplorer将项目文件夹拖放到容器中...但我无法弄清楚如何从Blob存储中下载文件夹以便工作角色使用。我相信它只是以字节流的形式下载。 - RobVious
9个回答

17

您可以使用upload-batch

az storage blob upload-batch --destination ContainerName --account-name YourAccountName --destination-path DirectoryInBlob --source /path/to/your/data

此命令将源目录中找到的所有文件复制到 Blob 存储中的目标目录。

需要指定 SAS 令牌(通过 --sas-token)或账户密钥。

还可以与服务主体平滑配合使用。


7

使用 az login 登录 Azure CLI。

  1. 要上传文件,请使用 az storage blob upload 命令,并添加其他参数。

  2. 要上传一个文件夹,请使用 az storage blob upload-batch 命令,并添加其他参数。

完整命令请参考这里


4

这是我的首选,因为我很懒。但我认为你只能一次上传一个文件夹(及其子文件夹)。 - Playing With BI

3
你可以采取两种方式:单文件(例如zip)或多文件(每个文件都在自己的blob中)。以下是我的看法,然后是有关解压缩的说明:
单个zip文件
这是一种非常简单的方法来维护一组文件,比如apache安装或一组静态资源。从blob下载到本地存储非常简单。而且,zip文件可以处理任何级别的嵌套目录。
缺点:要更新单个文件,您需要创建一个新的zip;没有办法仅上传一个修改后的资产。
单独的blobs
当您需要快速更新单个文件而不必担心其他文件时,单独的blobs非常好。此外,您可以直接链接到这些blobs,无论是公共的还是(通过Shared Access Signature)私有的,并在网页中嵌入链接等。请查看我的答案 here以及@Sandrino的示例。哦,如果您计划通过CDN公开blobs,则它们需要在单独的blobs中。
缺点:无法绝对映射到嵌套目录。Blob 存储按 account\container\blob 排列。虽然您可以模拟嵌套文件夹,但需要一些工作来映射单个文件。要下载单个 Blob,您需要获取容器并调用 ListBlobs() 枚举单个 Blob 名称。
如何解压缩
Eclipse 项目提供了一个非常简单易用的 vbs 脚本。从 Visual Studio 项目(或任何脚本)中,我会考虑下载像 7zip 这样的东西,它是免费且易于安装的。然后只需将 zip 从 Blob 存储下载到本地存储(在适当的文件夹中),并将其传递给 7zip。
我希望这为您提供了足够的指导,以做出正确的决定。如果是我,并且我正在存储构建(例如 tomcat),我会将整个目录结构保存在 zip 中。这给了我保证,我没有通过修改单个文件来破坏某些东西。而且...我可以轻松地使用多个 zip(在单独的 blob 中)保留 tomcat 版本的运行历史记录。

非常酷。我想我会尝试将所有内容压缩成一个文件。这意味着我需要在容器中有三个文件:构建归档、7zip可执行文件和一个批处理脚本,告诉工作角色安装7zip,解压构建,然后运行部署。听起来对吗?干杯 :) - RobVious
听起来没错。7zip不一定要放在同一个容器中。可以有任意多个容器。批处理脚本应该是你的Windows Azure部署的一部分。由于7zip提供了一个MSI,可以从启动脚本中执行。你仍然需要将7zip下载到本地存储以进行安装。使用公共Blob很容易做到,或者直接从SourceForge下载。如果在私有Blob中,您需要一种方法来获取访问密钥,或者具有Blob或容器的共享访问签名。现在,我建议简单起见,使用公共Blob来存储7zip msi。 - David Makogon

3
使用AZCOPY工具,您可以在一行代码中完成此操作。 详细信息请参见此处
Cd "C:\Program Files (x86)\Microsoft SDKs\Azure\AzCopy"

.\AzCopy /Source:C:\Users\folderName\ `
/Dest:https://storageAccountName.blob.core.windows.net/storageContainerName `
/DestKey:yourStorageAccountKey /S

1
请使用 Azure Storage Explorer。安装后,您需要登录,然后可以选择您的Blob并像普通上传过程一样上传文件夹。
我遇到了同样的问题,尝试通过上传压缩的文件夹来解决问题,但在Azure中没有解压文件夹的选项。

1

尝试使用带有storage-preview扩展的Azure CLI

例如,如果您有一个名为“draft”的目录,并且想要上传所有内容

  az extension add --name storage-preview --yes
  az storage azcopy blob upload -c container-name --account-name storage-account-name -s draft --recursive

0
你可以简单地使用存储资源管理器来完成这个任务。我用它很顺利。 它使用azcopy,如果需要,你可以复制命令。你可以使用连接字符串连接你的存储账户。

-1
我们可以拖放需要上传的文件夹,无需压缩/解压... 这将上传所有文件夹中的所有文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接