我正在Struts 2.5中编写代码,用户可以在其中下载使用AJAX上传的文件。它仅适用于.txt
,.log
,.rtf
和.svg
文件。
正在下载.xls
,.doc
和.gif
之类的文件,但它们没有打开并显示为损坏。我无权共享组织的代码。
我也在使用download.js,头内容类型用于响应应用程序/八位字节流。使用download.bind
$.ajax({
type: "POST",
enctype: 'multipart/form-data',
url: "myURL?&filePath=" + $(name).html() + "&fileName=" + $(name).html().split(/[\/]/).pop(),
cache: false,
processData: false,
contentType: "application/x-www-form-urlencoded; charset=UTF-8",
success: function(data) {
if (data.includes("OK")) {
console.log("Upload Passed");
} else {
console.log("Upload failed");
}
}
});
已解决...以前正在使用。
`$.ajax({
type: "POST",
enctype: 'multipart/form-data',
url: "url?&filePath="+$(name).html()+"&fileName="+$(name).html().split(/[\\\/]/).pop(),
cache: false,
processData: false,
contentType: "application/x-www-form-urlencoded; charset=UTF-8",
success: function(data){
if(data.includes("OK")) {
console.log("Upload Passed");
}else{
console.log("Upload failed");
}
}
});`
这导致二进制响应是混淆的文本
`var ajax = new XMLHttpRequest();
ajax.open("POST",url,true);
ajax.onreadystatechange = function(){
if(this.readyState == 4) {
if(this.status == 200) {
console.log(typeof this.response); // should be a blob
var blob = new Blob([this.response], {type: "application/octet-stream"});
var fileName = "test.pdf";
saveAs(blob, fileName);
} else if(this.responseText != "") {
console.log(this.responseText);
}
} else if(this.readyState == 2) {
if(this.status == 200) {
this.responseType = "blob";
} else {
this.responseType = "text";
}
}
};
ajax.send(json);`