下载链接没有返回正确的字节流

时间:2009-09-04 18:56:21

标签: asp.net

我正在从数据库服务器检索文件并允许用户下载它。问题是,我没有得到与从服务器读取的相同的字节流。

我已经确认(通过大量的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。

1 个答案:

答案 0 :(得分:2)

您不应将二进制数据视为字符串。在此示例中,ASCII编码仅支持0-127范围内的字符,因此任何不属于该范围的字节都将被视为无效并替换为问号。请改用HttpResponse.BinaryWrite

Response.BinaryWrite(st.FileContents);