【发布时间】:2016-05-06 06:54:13
【问题描述】:
脚本的功能目的是在容器中接收一组 blob 名称。并创建一个可在以后下载的 .ZIP 文件。
经过一些研究,我能够触发 WebJob 并将图像添加到存档并将其上传回 Blob 存储。问题是所有文件都有零字节。我对 C# 中的 Streams 完全陌生,但一直在这样的前提下操作
我的假设是否不正确?
我怀疑我的问题与循环图像时的某些异步操作有关,在写入和上传存档之前,这些操作永远不会完成。
代码如下,任何帮助将不胜感激!
public static void ArchiveImagesTask(
[QueueTrigger("download")] AssetImagesArchive assetImages,
string id,
string email,
string container,
string[] images,
[Blob("{container}")] CloudBlobContainer sourceContainer,
[Blob("downloads")] CloudBlobContainer targetContainer)
{
using (var memoryStream = new MemoryStream())
{
using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
{
foreach (var image in images)
{
var blobInArchive = archive.CreateEntry(image, CompressionLevel.Optimal);
var blob = sourceContainer.GetBlockBlobReference(image);
using (var entryStream = blobInArchive.Open())
using (var fileToCompressStream = new MemoryStream(blob.StreamWriteSizeInBytes))
{
fileToCompressStream.CopyTo(entryStream);
}
}
}
var zip = targetContainer.GetBlockBlobReference($"{id}.zip");
memoryStream.Seek(0, SeekOrigin.Begin);
zip.UploadFromStream(memoryStream);
}
}
【问题讨论】:
标签: c# azure azure-webjobs