我正在从数据库服务器检索文件并允许用户下载它。问题是,我没有得到与从服务器读取的相同的字节流。
我已经确认(通过大量的response.write)我收到了正确的字节数组,它们的顺序正确,等等......
这是下载的代码st.FileContents是一个byte []:
Response.Clear();
Response.AddHeader("Content-Disposition",
"attachment; filename=" + st.FileName);
Response.AddHeader("Content-Length", st.FileSize.ToString());
Response.ContentType = "application/octet-stream";
Response.Write(new System.Text.ASCIIEncoding()
.GetString(st.FileContents)); // Problem line
Response.End();
我尝试了将byte []转换为字符串的几种方法,但没有一种方法可以提供我需要的结果。而不是预期的字节流:
FF D8 FF E0 1E D0 4A 46 58 58 00 10 FF D8 FF DB
(是的,这是jpeg图像的开始)
我结束了类似的事情:
C3 BF C3 98 C3 BF C3 A0 1E C3 90 4A 46 58 58 00
前6个字节被破坏成10个完全不同的字节。是什么给了什么?
修改
答案当然是使用BinaryWrite而不是Write。
答案 0 :(得分:2)
您不应将二进制数据视为字符串。在此示例中,ASCII编码仅支持0-127范围内的字符,因此任何不属于该范围的字节都将被视为无效并替换为问号。请改用HttpResponse.BinaryWrite
:
Response.BinaryWrite(st.FileContents);