将多个字节数组写入 zip 文件,文件损坏Dot Net

问题描述

遇到问题保存多个字节数组组成单个 zip 文件(通过网络套接字从浏览器发送)压缩文件文件已损坏

原始 zip 文件被加载到浏览器中,并被分割成大小为 512 字节的块,设置为 ByteArray 形式的 protobuf 消息并通过网络套接字发送:

var tempData = new Uint8Array(evt.target.result); 
uploadFile.setContent(tempData);

然后在接收应用程序(.net standard 2.0)中,它使用字节数组以及从文件开头的偏移量获取文件块,并使用文件流写入:

byte[] data = fileMsg.Content.ToByteArray(); // Get the bytes 

using (var fs = new FileStream(path,FileMode.OpenorCreate,FileAccess.ReadWrite)) // Write the bytes
{
    fs.Seek(fileMsg.Offset,SeekOrigin.Begin);
    fs.Write(data,data.Length);
}

if (fileMsg.Offset + data.Length == (long)fileMsg.FileSize)  //Last file chunk
{
    Logger.LogInfo("File upload done");
    return true;
}

检查字节是否按顺序写入,这意味着每次偏移量都会比上次更大。 该方法被锁定,因此不会产生异步写入,并且所有字节都应该写入文件,在写入结束时与发送的文件大小相同。

对于 100KB 以下的小 zip 文件,它可以工作,但发送更大的文件几乎总是会损坏。 我正在调试模式下从 Visual Studio 2017 运行 dot net 应用程序,并且使用 vue.js 运行带有 npm 的浏览器客户端。

我尝试为文件设置长度,收集零件并立即保存它们,使用 ICSharpCode 中的 ZipOutputStream,但似乎没有任何效果

任何帮助都将不胜感激!

谢谢:)

罗伊。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)