因此,我正在一个需要调用服务器并返回zip文件的网站上工作,问题是我不确定自己是否做对了所有事情。该代码看起来像这样:
function download(){
if($('.download').hasClass('activeBtn')){
$.ajax({
type: 'GET',
url: someUrl,
contentType: 'application/zip',
dataType: 'text',
headers: {
'Api-Version': '3.4'
}
}).then(function (data) {
console.log(data); //Basically prints the byte array
//Here I should build the file and download it
});
}
}
如您所见,我需要使用响应中的字节数组来填充文件,我该怎么做?
一种利用的方法XMLHttpRequest()
;
检查a
element是否具有download
属性,如果为true,则将download
property 设置为objectURL
;
否则,使用window.open()
带参数objectURL
的Blob
响应
function downloadFile(url, headers, filename) {
function handleFile(data) {
console.log(this.response || data);
var file = URL.createObjectURL(this.response || data);
filename = filename || url.split("/").pop();
var a = document.createElement("a");
// if `a` element has `download` property
if ("download" in a) {
a.href = file;
a.download = filename;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
} else {
// use `window.open()` if `download` not defined at `a` element
window.open(file)
}
}
var request = new XMLHttpRequest();
request.responseType = "blob";
request.onload = handleFile;
request.open("GET", url);
for (var prop in headers) {
request.setRequestHeader(prop, headers[prop]);
}
request.send();
}
downloadFile("/path/to/resource/", {"x-content": "abc"}, "filename.zip")
使用jQuery版本叉的jquery-ajax-blob- arraybuffer.js
/**
*
* jquery.binarytransport.js
*
* @description. jQuery ajax transport for making binary data type requests.
* @version 1.0
* @author Henry Algus <henryalgus@gmail.com>
*
*/
// use this transport for "binary" data type
$.ajaxTransport("+binary", function(options, originalOptions, jqXHR){
// check for conditions and support for blob / arraybuffer response type
if (window.FormData && ((options.dataType && (options.dataType == 'binary'))
|| (options.data
&& ((window.ArrayBuffer && options.data instanceof ArrayBuffer)
|| (window.Blob && options.data instanceof Blob))))
)
{
return {
// create new XMLHttpRequest
send: function(headers, callback){
// setup all variables
var xhr = new XMLHttpRequest(),
url = options.url,
type = options.type,
async = options.async || true,
// blob or arraybuffer. Default is blob
dataType = options.responseType || "blob",
data = options.data || null,
username = options.username || null,
password = options.password || null;
xhr.addEventListener('load', function(){
var data = {};
data[options.dataType] = xhr.response;
// make callback and send data
callback(xhr.status
, xhr.statusText
, data
, xhr.getAllResponseHeaders());
});
xhr.open(type, url, async, username, password);
// setup custom headers
for (var i in headers ) {
xhr.setRequestHeader(i, headers[i] );
}
xhr.responseType = dataType;
xhr.send(data);
},
abort: function(){
jqXHR.abort();
}
};
}
});
function downloadFile(url, headers, filename) {
return $.ajax({
url:url,
dataType:"binary",
processData: false,
headers:headers
})
.then(function handleFile(data) {
console.log(this.response || data);
var file = URL.createObjectURL(this.response || data);
filename = filename || url.split("/").pop();
var a = document.createElement("a");
// if `a` element has `download` property
if ("download" in a) {
a.href = file;
a.download = filename;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
} else {
// use `window.open()` if `download` not defined at `a` element
window.open(file)
}
})
}
downloadFile("/path/to/resource/", {"x-custom-header":"abc"}, "filename.zip");
只需下载就可以了
您可以使用<a>
元素,download
属性
$("<a>", {href: someUrl,
download: "filename.zip"
}).appendTo("body")[0].click()
或者使用库解析文件,例如,从文件中包含的数据zip.js
创建多个或单个可下载.zip
文件。
创建每个文件的objectURL,使用a
元素下载每个文件。
如果download
浏览器不提供该属性,则可以使用类型设置为下载文件data URI
的文件对象MIME``application/octet- stream
问题内容: 是否可以在HTML的主流中显示由jQuery AJAX调用返回的图像? 我有一个脚本,用于绘制带有标题的图像(图像/ PNG)。当我在浏览器中简单地调用它时,就会显示图像。 但是,当我在此脚本上使用jQuery进行AJAX调用时,我无法显示干净的图像,但其中包含许多奇怪的符号。这是我的脚本,使图像带有标题(图像/ PNG)。 然后,我的主要脚本中包含一个AJAX调用: 在我的HTML文
我想用Ajax下载多种类型的文件。
我正在尝试在Spring Boot中使用WebClient制作API POST Request。但是我无法以JSONObject的形式发出请求并接收响应。使用RestTemboard我做到了,最近我开始学习WebClient。所以我被卡住了。 错误Spring给出:错误:(48,28)java:不兼容的类型:不存在类型变量T的实例,因此reactor.core.publisher.Mono符合or
问题内容: 我想知道是否可以对特定网址进行ajax发布请求,并且仅应要求在数据中接收zip文件?还是我必须发送两个请求…一个,是为了使已创建的服务器内的zip文件的URL成为另一个,而另一个要下载该zip文件? 问题答案: 本机答案是否定的! 但是你可以这样做。 您的ajax请求: 您的php文件:
问题内容: 如果浏览器收到对ajax请求的重定向响应,该怎么办? 问题答案: 如果浏览器收到对ajax请求的重定向响应,该怎么办? 如果服务器发送了重定向(又名302响应加上Location:标头),则浏览器将自动跟随重定向。对 第二个 请求的响应(假设它也不是另一个重定向)是程序所暴露的。 实际上,您没有能力检测是否已发生302响应。如果302重定向导致200,则您的程序的行为就如同原始请求直接
问题内容: 请考虑以下javascript: URL返回一个.csv文件,但是我指定了数据类型,因为这是一个跨域的ajax请求。没有该参数,我会收到“不允许原点”错误。 由于我指定了数据类型,因此.csv文件不是JSON格式,所以ajax函数会引发错误。但是在开发控制台中,我可以看到浏览器确实收到了一个连贯的.csv文件。因此,我知道我已经成功接收了CSV文件。我认为应该可以,但是我不确定如何正确