正在将文件写入HttpResponse,浏览器未提示保存
Writing file to HttpResponse, browser not prompting to save
我有一个带有IHttpHandler的ashx文件。当我将一些数据POST到此IHttpHandler时,我会做一些工作,创建一个文件,然后希望将该文件返回给用户,以便他们可以通过浏览器保存该文件。
创建文件后,这就是我尝试将文件写回响应的方式:
HttpResponse response = context.Response;
response.ClearContent();
response.Clear();
response.ContentType = "application/octet-stream";
response.AddHeader("Content-Disposition", "attachment; filename=MYFILE.EXT");
response.WriteFile("C:'tempstuff'MYFILE.EXT");
在稍后的最后一个区块中,我将调用:
response.End()
当我调用这个Handler时,什么也没发生。返回响应200,不会引发任何错误,但浏览器不会提示用户保存此文件。
Fiddler捕捉到的反应如下:
HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Thu, 23 Aug 2012 12:12:19 GMT
X-AspNet-Version: 4.0.30319
Content-Disposition: attachment; filename=MYFILE.EXT
Cache-Control: private
Content-Type: application/octet-stream
Content-Length: 781053
Connection: Close
[raw content of the file here]
这个响应在我看来是正确的。它包含了文件的内容,但是在任何主要浏览器下,都没有文件对话框提示我保存文件。
我在这里做错了什么?
更新:如果有帮助的话,这里是我使用web应用程序中的JavaScript来调用这个HttpHandler的地方。
$.ajax({
type: 'POST',
url: ashxUrl,
data: postData,
success: function (result) {
// Doin' stuff on success
},
error: function (error) {
// Doin' stuff on error.
}
});
您已经说过,您希望web调用的结果对您的javascript可用。如果这导致浏览器提示你保存它,那将是非常令人讨厌的,因为所有的AJAX都是不可能的。
您希望浏览器本身进行调用。对于GET来说,这将是设置self.location.href
的简单问题。对于POST,最简单的方法通常是用数据填写一个隐藏的表单,然后submit()
它。
相关文章:
- 正在将文件写入HttpResponse,浏览器未提示保存
- 如何防止高图工具提示弹出隐藏,在图形区域或浏览器窗口上调整大小
- 工具提示是否有跨浏览器方式
- 移动平台 Web 浏览器中的 JavaScript 上下文菜单和工具提示
- Javascript prompt() 在 Android 浏览器中有暗淡(微弱)的提示消息
- 如何从客户端浏览器中的内容生成和提示保存文件
- 浏览器中的JavaScript提示下载
- 如何在ie10和ie11中隐藏浏览器默认工具提示
- AngularJS浏览器身份验证提示
- 我该如何摆脱浏览器'的本地工具提示
- 浏览器更新提示Internet Explorer 8
- qTip2:当链接靠近浏览器的右侧时,如何使工具提示向左移动
- 跨浏览器高级工具提示功能
- 提示浏览器下载对话框
- 在chrome扩展应用程序中更改浏览器操作工具提示上的标题
- 如何从窗口更改emscripten浏览器输入法.提示你做一些更明智的事情
- 为什么Chrome浏览器不显示允许或禁止使用麦克风和网络摄像头的提示?
- 是否有浏览器支持或任何插件,显示html元素的ID或名称作为工具提示,而悬停在一个元素
- 获取浏览器提示"确认导航"选择“离开此页面”;或者“留在这一页”;在Woocommerce结账
- 如何在新选项卡中打开链接?使用JavaScript或jQuery.没有浏览器提示的弹出窗口被阻止