下载后文件出错

时间:2010-07-17 09:22:02

标签: asp.net transmitfile

我有word文档在服务器上完美打开,但是当我使用我的网站的按钮点击事件下载它时,它获得了当前。 我使用下面的代码按钮单击以进行文档下载。 请帮忙解决这个问题: 我正在使用.net framework 3.5

 Response.Clear();
 Response.AddHeader("Content-Disposition", "attachment; filename=StandardLetter" + _responseId.ToString() + ".doc");
 Response.ContentType = "application/octet-stream";

 Response.TransmitFile (Server.MapPath("~/document/letter/StandardLetter" + _responseId.ToString() + ".doc"));

3 个答案:

答案 0 :(得分:2)

您发布的代码后是否有Response.End()?如果没有,您将从添加到传输文件的aspx文件中获得额外的“html”代码 - 从而破坏它。

修改
正如Akshay Anand所提到的,更好的方法是拨打HttpContext.Current.ApplicationInstance.CompleteRequest();而不是Response.End() see docs。另请参阅this question

答案 1 :(得分:1)

而是尝试:

Response.ContentType ="application/msword";

我不使用Word,但对于Excel,我使用:

Response.ContentType = "application/x-msexcel"

答案 2 :(得分:1)

好的,这里是我使用的代码,它是vb但很容易转换;)

 Response.ContentType = "application/pdf"
        Dim byteArray As Byte() = File.ReadAllBytes(MergedFile)

        Response.AddHeader("Content-Disposition", "attachment;filename=""" & ShortFilename & """")
        Response.AddHeader("Content-Length", byteArray.Length)
        Response.BinaryWrite(byteArray)
        Response.Flush()
        Response.End()

这适用于PDF,并且通过将.ContentType更改为Excel也会出现这种情况。所以我认为这将采用任何MIME类型。祝你好运!

我把我的pdf文档称为MergedFile并将其转换为byte(),我给它一个可以由用户输入的'ShortName'。内容长度非常重要..