【发布时间】:2020-04-02 22:53:59
【问题描述】:
我正在使用以下代码通过 DotNetZip nuget 包将 XML 文件上传到 Azure Blob 存储帐户。
XmlDocument doc = new XmlDocument();
doc.Load(path);
string xmlContent = doc.InnerXml;
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
var cloudBlobClient = storageAccount.CreateCloudBlobClient();
var cloudBlobContainer = cloudBlobClient.GetContainerReference(container);
cloudBlobContainer.CreateIfNotExists();
using (var fs = File.Create("test.zip"))
{
using (var s = new ZipOutputStream(fs))
{
s.PutNextEntry("entry1.xml");
byte[] buffer = Encoding.ASCII.GetBytes(xmlContent);
s.Write(buffer, 0, buffer.Length);
fs.Position = 0;
//Get the blob ref
var blob = cloudBlobContainer.GetBlockBlobReference("test.zip");
blob.Properties.ContentEncoding = "zip"
blob.Properties.ContentType = "text/plain";
blob.Metadata["filename"] = "test.zip";
blob.UploadFromStream(fs);
}
}
此代码在我的容器中创建一个 zip 文件。但是当我下载它并尝试打开它时,我收到以下错误: “Windows 无法打开文件夹。压缩(压缩)文件夹无效”。但是我的应用程序目录中保存的压缩文件可以很好地解压缩并包含我的 xml 文件。 我做错了什么?
【问题讨论】:
-
流需要刷新吗?文件流在这里似乎是多余的,但我认为它已经准备好进行测试了?
-
@BrendanGreen 我尝试刷新两个流,但没有运气。文件流在这里用于测试,但实际上我在那里使用 MemoryStream,因为
blob.UploadFromStream函数由于某种原因不喜欢 ZipOutputStream。如果我直接传入 ZipOutputStream,我会得到一个空的 zip 文件。
标签: c# azure azure-blob-storage dotnetzip