我想提供动态下载文件。这些文件可以在服务器端即时生成,因此它们表示为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 ...
时出错我做错了什么?
答案 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)