Azure PHP SDK:在单个 zip 文件中下载容器的所有 blob

Posted

技术标签:

【中文标题】Azure PHP SDK:在单个 zip 文件中下载容器的所有 blob【英文标题】:Azure PHP SDK: download container's all blob in a single zip file 【发布时间】:2018-03-01 14:43:56 【问题描述】:

我想将指定容器中的所有 blob 下载为 zip 文件。 有没有办法直接从 Azure 下载它的 zip 文件,不需要在我的服务器上处理它?

目前我认为如下:

file_put_contents("file_name", get_file_contents($blob_url));

我会将所有文件存储在我的服务器上,然后创建这些文件的 zip 文件,然后强制下载。 .

【问题讨论】:

【参考方案1】:

Azure 没有这样的工具来为你生成一个 blob 包的 zip 文件。 Azure 存储只是……存储。您需要通过 php sdk(或直接通过 api,如果您愿意)下载每个 blob。

如果您想要压缩内容,则需要先压缩内容,然后再存储到 blob 存储中。

您的代码(在您的问题中)不会按原样工作,因为 get_file_contents() 期望与文件 I/O 一起工作,而这不是与 blob 交互的方式。相反,你会做这样的事情:

$getBlobResult = $blobClient->getBlob("<containername>", "<blobname>");
file_put_contents("<localfilename>", $getBlobResult->getContentStream());

【讨论】:

谢谢你的回答,顺便说一下我的逻辑和工作,代码如下$file_url = "https://mysite.blob.core.windows.net/container-name/" . $blob_name; file_put_contents($local_server_file_path, file_get_contents($file_url)); $zip-&gt;addFile( $local_server_file_path, $prop_doc['image_name'] ); 如何获取容器中文件夹内的 blob?例如:container_name/folder_name/blob @Suraj - 我建议提出一个单独的问题,而不是在 cmets 中。但是......请注意,使用 Azure 存储 blob 时没有“文件夹”;由于/ 字符,它看起来就像那样。因此,您必须根据名称模式进行枚举。

以上是关于Azure PHP SDK:在单个 zip 文件中下载容器的所有 blob的主要内容,如果未能解决你的问题,请参考以下文章

Azure PHP SDK:按资产名称获取资产

Azure Blob PHP SDK - 直接从自定义多部分 API 请求上传到 Azure 存储

PHP 中的 Azure 通知给单个用户

在 azure blob 子容器中从本地上传 zip

Ionic Zip 密码设置在 azure blob 存储中,并为 zip 文件夹而不是文件设置最佳压缩

从 azure blob 存储文件生成 Zip 文件