【发布时间】:2011-12-09 10:40:11
【问题描述】:
我正在 ASP.net 中编写一个 web 应用程序。
我正在尝试显示一个文件对话框,用于从服务器下载内容。
我将适当的文件数据存储在一个名为 file 的变量中。
文件具有以下字段:
FileType - 文件的 MIMEType
FilePath - 服务器端文件路径
这是目前为止的代码:
Response.Clear();
Response.ContentType = file.FileType;
Response.AppendHeader("Content-Disposition", "attachment; filename=" + GetFileName(file));
Response.TransmitFile(file.FilePath) ;
Response.End();
GetFileName 是一个从附件对象中获取文件名的函数。我只存储路径。
上面的代码在一个名为“Download_Clicked”的函数中,它是一个在点击时触发的事件。该事件被映射到一个 LinkButton。
问题是当我运行上面的代码时,什么也没有发生。不出现标准对话框。
我已尝试进行标准故障排除,例如确保文件存在并确保路径正确。他们都死定了。
我的猜测是因为我的机器也是服务器,它可能无法以某种方式正确处理。
提前致谢。
编辑 1:尝试将控制权放到另一个页面上,工作正常。
编辑 2:通过从 AJAX 更新面板移除控制来解决问题。
【问题讨论】:
-
IIS 是否知道 mime 类型?你试过使用“application/octet-stream”吗?
-
我尝试了 octet-stream MIME 类型,但还是不行。
-
Ajax 更新面板不能很好地配合 FileUpload 控件或使用 Response 下载文件。 MSAjax 库内置了安全措施,如果您修改响应流,则会引发错误。下载动态生成的文件的常用技术是将文件数据临时存储在会话变量中,然后将用户重定向到一个页面,该页面专门在页面加载时查看该会话变量并将文件发送到浏览器。您也可以使用 http 处理程序来执行此操作,或者只是将文件上传/下载控件留在更新面板之外
标签: asp.net download transmitfile