在我的FCGI应用程序中,我希望以某种方式使服务器端响应,以使浏览器(要使用大多数浏览器)打开“另存为”对话框,然后将文件实际保存在用户硬盘上。
我失败了这个
这是从Chrome接收到的请求/响应的转储:
Remote Address:192.168.1.69:80
Request URL:http://192.168.1.69/sunprint/sunweb.fcgi?GETPCBSDATAASFILE2SAVE
Request Method:GET
Status Code:200 OK
Request Headers
GET /sunprint/sunweb.fcgi?GETPCBSDATAASFILE2SAVE HTTP/1.1
Host: 192.168.1.69
Connection: keep-alive
Accept: */*
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) >Chrome/34.0.1847.116 Safari/537.36
Referer: http://192.168.1.69/sunprint/PCBsVersions.html
Accept-Encoding: gzip,deflate,sdch
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Query String Parameters
GETPCBSDATAASFILE2SAVE
Response Headers
HTTP/1.1 200 OK
Date: Mon, 05 May 2014 10:21:23 GMT
Server: Apache/2.2.22 (Ubuntu)
Cache-Control: no-cache, must-revalidate
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Content-Description: File Transfer
Content-Disposition: attachment; filename="SunSerialNumbers.txt"
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 227
Keep-Alive: timeout=5, max=81
Connection: Keep-Alive
Content-Type: text/plain
我文件的内容是一组可打印的ASCII符号。顺便说一句,我应该以某种方式编码内容吗?
似乎所有必需的标头都存在,但浏览器仍然拒绝显示所需的对话框。标头组合是否存在错误?
要发出请求,我使用以下代码:
函数sendCommandGetFile(url1){
$ .ajax({
网址:url1,
类型:“ GET”
});
}
sendCommandGetFile(“ sunweb.fcgi?GETPCBSDATAASFILE2SAVE”,function(data){});
非常感谢您的帮助。
最佳答案
X-Requested-With: XMLHttpRequest
没有一组HTTP标头会导致浏览器下载使用XHR响应请求而获得的文件。
您有三个基本选项。
首先不要使用XHR
将文件数据存储在某处,给它一个临时URI,将URI传递回响应中,让客户端JS将location
设置为该URI
构造一个data:
方案URI,并让客户端JS将其分配给location
。
除非您确实确实有时需要返回文件,有时需要返回数据以供JS处理(例如错误消息),否则选项1是最好的。