在ASP.NET2.0中提供动态文件下载

时间:2009-01-22 12:13:32

标签: c# asp.net dynamic download

我想提供动态下载文件。这些文件可以在服务器端即时生成,因此它们表示为byte []并且不存在于磁盘上。我希望用户填写一个ASP.NET表单,点击下载按钮并返回他/她想要的文件。

以下是我在ASP.NET表单后面的代码的样子:

public partial class DownloadService : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}

protected void submitButtonClick(object sender, EventArgs e)
{
    if (EverythingIsOK())
    {
        byte[] binary = GenerateZipFile(); 
        Response.Clear();
        Response.ContentType = "application/zip";
        Response.ContentEncoding = System.Text.Encoding.UTF8;
        Response.BinaryWrite(binary);
        Response.End();
    }
}
...
}

我希望这段代码能够正常工作。我清除Respone,放入我生成的zip文件和宾果游戏。然而,这种情况并非如此。我在浏览器中收到以下消息:

无法显示XML页面 无法使用样式表查看XML输入。请更正错误,然后单击“刷新”按钮,或稍后重试。 在文本内容中找到了无效字符。处理资源“http://localhost:15900/mywebsite/DownloadS ...

时出错

我做错了什么?

3 个答案:

答案 0 :(得分:2)

以下是您需要进行的一项小修改:

Response.Clear();
Response.ContentType = "application/x-zip-compressed";
Response.BinaryWrite(binary);
Response.End();

答案 1 :(得分:2)

这是我的(工作)实施:

Response.Clear();
Response.ContentType = mimeType;
Response.AddHeader("Content-Disposition", String.Format("attachment; filename=\"{0} {1} Report for Week {2}.pdf\"", ddlClient.SelectedItem.Text, ddlCollectionsDirects.SelectedItem.Text, ddlWeek.SelectedValue));
Response.BinaryWrite(bytes);
Response.Flush();
Response.End();

mimeType就像你的应用程序/ zip(PDF除外)。 主要区别在于传递的额外标头信息以及响应对象上的Flush调用。

答案 2 :(得分:0)

查看here以获取有关应用程序/ zip的信息。可能是内容编码错误。并here's发送其他类型的指南。另外here是如何为pdfs执行此操作的指南。