通过http上传zip文件偶尔会导致文件损坏(CRC校验失败)

时间:2013-04-24 15:50:10

标签: c# windows http file-upload zip

我遇到了一个非常奇怪的问题。将zip文件从Windows 8客户端(用C#编写)上载到Server 2008 R2上运行的IIS网页(也在C#中)时,该文件偶尔会损坏。我们无法使用任何其他客户端操作系统(Windows 7,Vista,XP)重现该问题。它不一致,但经常发生问题。

当我使用二进制差异工具检查zip文件时,我发现替换是有明确的模式。

Binary diff comparison

这是替换的一个例子。模式在文件的不同实例之间是一致的。顶部是原始文件,底部是保存在服务器端的上传文件。

所有变化的模式都是一样的。首先是模式的八字节块:

  

0 0 C 0 F r e e

其中C是某个字符,后跟一个8字节未修改部分。

然后有一个16字节的修改部分,分为两个相同的8字节块。

模式过于一致,无法随机,但我不知道是什么导致了这些问题。我甚至不确定从哪里开始。

该代码已在Windows 7和XP上运行多年,没有明显问题。

2 个答案:

答案 0 :(得分:0)

唯一的猜测是在运输层面发生了一些事情。诊断问题的方法:使用不同的客户端/代码/组件上传相同的文件,并查看问题是否消失。文件中的实际更改很可能无关紧要。我认为分块编码或压缩(或两者)都用于传输,并且由于客户端或服务器中的错误而中断数据。如果您可以确保不使用分块编码和不使用压缩,则另一个组件将解决此问题。

答案 1 :(得分:0)

此问题最终成为vmware中的网卡驱动程序问题。一旦我们更新了我们的vmware版本,一切都恢复了快乐。