1

我想提供文件的动态下载。这些文件可以在服务器端即时生成,因此它们表示为 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();
    }
}
...
}

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

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

我究竟做错了什么?

4

3 回答 3

2

这是您需要进行的小修改:

Response.Clear();
Response.ContentType = "application/x-zip-compressed";
Response.BinaryWrite(binary);
Response.End();
于 2009-01-22T12:25:18.707 回答
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 除外)。主要区别在于传递的额外标头信息,以及对 Response 对象的 Flush 调用。

于 2009-01-22T12:26:50.140 回答
0

在此处查找有关 application/zip 的信息。可能是 ContentEncoding 错误。这发送其他类型的指南。另外这里是关于如何为 pdf 执行此操作的指南。

于 2009-01-22T12:19:31.310 回答