在我的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符号。顺便说一下,我应该以某种方式对内容进行编码吗?
似乎所有需要的标题都存在,但浏览器仍然拒绝显示所需的对话框。是否存在错误的标题组合?
要发出请求,请使用以下代码:
function sendCommandGetFile(url1){
$阿贾克斯({
url:url1,
键入:" GET"
});
}sendCommandGetFile(" sunweb.fcgi?GETPCBSDATAASFILE2SAVE",function(data){});
非常感谢您的帮助。
答案 0 :(得分:3)
X-Requested-With: XMLHttpRequest
没有一组HTTP标头会导致浏览器下载它为响应使用XHR的请求而获取的文件。
您有三个基本选项。
location
设置为该URI data:
方案URI,并让客户端JS将其分配给location
。除非您确实需要有时返回一个文件,并且有时会返回JS处理的数据(例如错误消息),否则选项1是最好的。