我有一个C#.NET应用程序正在将压缩文件写回客户端以供下载。但是,浏览器不接收该文件或拒绝该文件。浏览器不显示任何通知。我在Firefox和Chrome上都试过了。
我使用Fiddler从客户端和服务器捕获了请求和响应:
请求:
str.upper('hello world')
响应:
POST http://localhost:62526/Reports/_Report_RewardLetters HTTP/1.1
Host: localhost:62526
Connection: keep-alive
Content-Length: 228
Accept: */*
Origin: http://localhost:62526
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
DNT: 1
Referer: http://localhost:62526/Reports
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8
我的代码:
HTTP/1.1 200 OK
Cache-Control: private
Transfer-Encoding: chunked
Content-Type: application/octet-stream
Server: Microsoft-IIS/10.0
content-dispostion: filename=Letter.zip
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcc2FpbmlfaFxTb3VyY2VcUmVwb3NcUmVzZWFyY2hPZmZpY2VEYXNoYm9hcmRcUmVzZWFyY2hPZmZpY2VEYXNoYm9hcmRcUmVwb3J0c1xfUmVwb3J0X1Jld2FyZExldHRlcnM=?=
X-Powered-By: ASP.NET
Date: Thu, 11 Feb 2016 23:13:22 GMT
....Truncated the file contents.....
我已尝试过多种Response.Flush(),Response.Clear(),HttpContext.ApplicationInstance.CompleteRequest(),Response.BinaryWrite(),Response.TransmitFile()等组合,但似乎都没有。另外,我在代码中有必要的检查以确定文件是否存在。
从fiddler捕获,我认为发送到客户端的文件的编码或服务器响应有问题,浏览器在没有任何通知的情况下拒绝该文件。
感谢您的帮助!
答案 0 :(得分:0)
只是想一想:你需要Response.Flush语句吗?设置标题,编写文件然后调用Response.End就足够了。
此外,将ContentType设置为" application / zip,application / octet-stream"
答案 1 :(得分:0)
我犯了一个错误导致所有的大惊小怪。视图使用Ajax表单来发出请求而不是普通的Html表单。
我通过根据此处显示的信息更改我的控制器和视图来解决问题: http://geekswithblogs.net/rgupta/archive/2014/06/23/downloading-file-using-ajax-and-jquery-after-submitting-form-data.aspx