【发布时间】:2021-02-07 03:51:10
【问题描述】:
我有一个带有 Azure 文件共享的 Azure 存储帐户。我想使用 Azure 函数将 zip 存档文件提取到文件共享中的另一个目录。我用 C# 编写了这段代码:
CloudFileDirectory rootDirectory = cloudFileShare.GetRootDirectoryReference();
CloudFileDirectory output = rootDirectory.GetDirectoryReference("output");
CloudFile cloudFile = input.GetFileReference("archive1.zip");
using (var stream = await cloudFile.OpenReadAsync())
{
var file1 = new ZipArchive(stream);
foreach (var zipEntry in file1.Entries)
{
var file2 = output.GetFileReference(zipEntry.Name);
var fileStream = zipEntry.Open();
await file2.UploadFromStreamAsync(fileStream); //error is in this line
}
}
但我得到了错误:
System.Private.CoreLib: Exception while executing function: HttpTriggerExtract. Microsoft.WindowsAzure.Storage:
Operation is not valid due to the current state of the object.
如何解决这个问题?
编辑:此外,我使用 MemoryStream 修复了错误,此代码有效:
foreach (var zipEntry in file1.Entries) {
var fsz = output.GetFileReference(zipEntry.Name);
using (var ms = new MemoryStream())
{
using (var fileStream = zipEntry.Open())
{
await fileStream.CopyToAsync(ms);
ms.Seek(0, SeekOrigin.Begin);
await fsz.UploadFromStreamAsync(ms);
}
}
【问题讨论】:
-
您还有其他顾虑吗?如果您没有其他顾虑,可以请accept it as an answer吗?它可能会帮助更多有类似问题的人。
-
问题在于从 fileStream 对象获取流。我不得不使用额外的内存流,现在一切正常。
-
感谢您的分享。你能发表你的答案吗?
-
是的,我已经编辑了我的问题并添加了工作代码。请投票。
标签: azure azure-functions azure-storage azure-files