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

2023-12-14

我的 Windows Azure Blob 存储中存储了一些文件。我想获取这些文件,创建一个 zip 文件并将它们存储在一个新文件夹中。然后返回 zip 文件的路径。 设置 zip 文件位置的权限,以便我的用户可以通过单击链接将 zip 文件下载到本地计算机

 https://mystorage.blob.core.windows.net/myfiles/2b5f8ea6-3dc2-4b77-abfe-4da832e02556/AppList/isjirleq/mydocs1.doc
 https://mystorage.blob.core.windows.net/myfiles/2b5f8ea6-3dc2-4b77-abfe-4da832e02556/tempo/xyz/mymusic.mp3
 https://mystorage.blob.core.windows.net/myfiles/2b5f8ea6-3dc2-4b77-abfe-4da832e02556/general/video/myVideo.wmv
 https://mystorage.blob.core.windows.net/myfiles/2b5f8ea6-3dc2-4b77-abfe-4da832e02556/photo/photo1.png

我希望能够循环这些文件并将它们全部压缩在一起以创建一个新的 zip 文件

(https://mystorage.blob.core.windows.net/myzippedfiles/allmyFiles.zip) 并返回 zip 文件的路径

我的天蓝色 blob 中有大量文件。因此下载、压缩和上传它们并不是一个好主意。

我怎样才能做到这一点?我需要一些示例代码来执行此操作


我们通过使用 blob 流将文件直接压缩到输出流(部分)解决了这个问题。这避免了下载压缩然后发送的问题,并避免了发生这种情况时的延迟(我们使用 ICSharpZipLib,参考)。但它仍然意味着通过 Web 服务器路由流:

  public void ZipFilesToResponse(HttpResponseBase response, IEnumerable<Asset> files, string zipFileName)
    {
        using (var zipOutputStream = new ZipOutputStream(response.OutputStream))
        {
            zipOutputStream.SetLevel(0); // 0 - store only to 9 - means best compression
            response.BufferOutput = false;
            response.AddHeader("Content-Disposition", "attachment; filename=" + zipFileName);
            response.ContentType = "application/octet-stream";

            foreach (var file in files)
            {
                var entry = new ZipEntry(file.FilenameSlug())
                {
                    DateTime = DateTime.Now,
                    Size = file.Filesize
                };
                zipOutputStream.PutNextEntry(entry);
                storageService.ReadToStream(file, zipOutputStream);
                response.Flush();
                if (!response.IsClientConnected)
                {
                   break;
                }
            }
            zipOutputStream.Finish();
            zipOutputStream.Close();
        }
        response.End();
    }

存储服务简单地执行以下操作:

public void ReadToStream(IFileIdentifier file, Stream stream, StorageType storageType = StorageType.Stored, ITenant overrideTenant = null)
    {
        var reference = GetBlobReference(file, storageType, overrideTenant);
        reference.DownloadToStream(stream);
    }
private CloudBlockBlob GetBlobReference(IFileIdentifier file, StorageType storageType = StorageType.Stored, ITenant overrideTenant = null)
        {
            var filepath = GetFilePath(file, storageType);
            var container = GetTenantContainer(overrideTenant);
            return container.GetBlockBlobReference(filepath);
        }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 azure blob 存储文件生成 Zip 文件 的相关文章

随机推荐