仅下载.txt .log .svg的文件,但.xlsx .xls .gif .docx等的文件下载失败

问题描述 投票:1回答:1

我正在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");
    }
  }
});
javascript jquery ajax struts
1个回答
1
投票

已解决...以前正在使用。

`$.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);`
© www.soinside.com 2019 - 2024. All rights reserved.