Azure 使用共享访问签名对多个文件进行压缩,并从流下载
本文关键字:压缩 下载 文件 共享 访问 Azure | 更新日期: 2023-09-27 18:33:17
是否可以使用共享访问签名将多个文件直接压缩到输出流,然后将其发送给用户?
我正在使用共享访问签名从我的 blob 存储下载 blob,并使用 DotNetZip 压缩 blob(或至少尝试(。
var images = _fileService.GetImages(companyID, model.ImageIDs).ToList();
if (images != null && images.Count > 0)
{
DateTime currentTime = TimeZoneExtensions.GetCurrentDate();
using (ZipFile zip = new ZipFile())
{
MemoryStream output = new MemoryStream();
foreach (var image in images)
{
if (image.ImageLinks != null)
{
//ImageLinks contains SAS uri for each image format..
List<ImageLinkModel> imageLinks = image.ImageLinks.Where(m => m.FormatID == model.FormatID).ToList();
if (imageLinks != null && imageLinks.Count > 0)
{
foreach (var imageLink in imageLinks)
{
if (String.IsNullOrEmpty(imageLink.DownloadURL) || imageLink.DateExpiresDownloadURL < currentTime)
{
int hours = 1;
imageLink.DateExpiresDownloadURL = currentTime.AddHours(hours);
//Create new shared access signature
imageLink.DownloadURL = _fileService.GetDownloadImageURL(imageLink.BlobName, image.ImageName, hours);
//Update imagelink
_fileService.UpdateImageLink(companyID, imageLink);
//Exception here
zip.AddDirectory(imageLink.DownloadURL);
}
else
{
//Use existing SAS download url
Exception here
zip.AddDirectory(imageLink.DownloadURL);
}
}
zip.Save(output);
}
}
}
return File(output, "application/zip", "sample.zip");
}
}
这就是我到目前为止想出的。
运行此方法并将文件添加到zip时,我得到异常: System.ArgumentException URI format not supported
.我假设您只能将本地路径添加到有意义的zip中,所以现在我不知道了。
这是我的 SAS 网址之一:
http://mystorage.blob.core.windows.net/images/22201642127PM625F493A7418BA855265516DF8038?sv=2015-04-05&sr=b&sig=%2FdNy6l6qyn7H1fh4D8T1Rd7emzgs%2B4GgQFlPoCOwBW4%3D&st=2016-02-05T09%3A35%3A04Z&se=2016-02-05T10%3A50%3A04Z&sp=r&rscd=Attachment%3B%20f...
URL 没有错,(我可以在不压缩的情况下下载(。
我在这里试图做不可能的事情吗?我是否被迫像这样以正常方式下载 blob,然后压缩它们?
谢谢
在 Azure 看来,blob 存储只是一个边界,其中包含一些位和字节。它没有文件类型的概念,也没有处理程序来对它们执行任何操作。(HTTP也没有(
您希望在不存在的存储中获得智能。您唯一能做的就是下载 URI
,所以是的,您需要下载它,然后压缩它,然后将其发送到任何地方。