You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从byte[]生成Zip文件后上传Blob存储无效,求代码排查

问题分析与修复:创建无效Zip文件的原因

你的代码存在一个关键错误:在ZipArchive的using块内部读取了MemoryStream的字节数组。

ZipArchive在Create模式下,并不会实时将所有Zip文件的结构信息写入底层流,它会在自身的using块结束(即释放资源)时,才会补充写入Zip文件必需的目录索引、结束标记等核心数据。你提前读取zipMemoryStream.ToArray()时,得到的只是Excel文件的原始字节,缺少Zip归档的关键结构,导致下载后的文件无法被识别为有效的Zip包。

修正后的代码

byte[] zipBytes;
using (var zipMemoryStream = new MemoryStream())
{
    using (var archive = new ZipArchive(zipMemoryStream, ZipArchiveMode.Create, true))
    {
        var zipExcelEntry = archive.CreateEntry(
           $"SAR-{subjectAccessRequest.Basic.FirstName}-{subjectAccessRequest.Basic.LastName}_{DateTime.Now:yyyyMMddHHmmss}.xlsx",
           CompressionLevel.Fastest);

        using (var excelEntryFile = zipExcelEntry.Open())
        {
            excelEntryFile.Write(stream.ToArray(), 0, (int)stream.Length);
        }
    };
    // 必须在ZipArchive释放后再读取流的内容
    zipBytes = zipMemoryStream.ToArray();
};

return zipBytes;

额外注意事项

  • 如果stream是已经被读取过的流(Position属性不为0),stream.ToArray()依然能获取完整内容,但如果后续改用stream.CopyTo(excelEntryFile)的方式写入,需要先执行stream.Position = 0重置流的位置。

内容的提问来源于stack exchange,提问作者Liam Kenny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 22:12:13