Javascript 使用ajax调用将base64字节数组下载到文件中

Javascript 使用ajax调用将base64字节数组下载到文件中,javascript,java,jquery,ajax,spring-mvc,Javascript,Java,Jquery,Ajax,Spring Mvc,我有以下问题 我需要发送多个附加文件作为JSON请求的一部分,并将其保存到数据库中 遵循以下步骤: 将上载的文件转换为base64字符串,并与其他值一起包含在JSON中 在服务器端,使用java将base64字符串转换为byte[]并存储在数据库中 下载从数据库检索的文件时出现问题 我已经编写了一个控制器方法来从数据库返回字节[],并使用XMLHttpRequest尝试保存该文件。但是在打开保存的文件时出现文件损坏错误 下面是我的javascript代码: var req

我有以下问题

我需要发送多个附加文件作为JSON请求的一部分,并将其保存到数据库中

遵循以下步骤:

  • 将上载的文件转换为base64字符串,并与其他值一起包含在JSON中
  • 在服务器端,使用java将base64字符串转换为byte[]并存储在数据库中
  • 下载从数据库检索的文件时出现问题

    我已经编写了一个控制器方法来从数据库返回字节[],并使用XMLHttpRequest尝试保存该文件。但是在打开保存的文件时出现文件损坏错误

    下面是我的javascript代码:

                var request = new XMLHttpRequest();
                request.open("POST", 'getAttachment/'+idTemp, true); 
                request.responseType = "blob";
                request.onload = function (e) {
                   if (this.status === 200) {
                      // `blob` response
                      console.log(this.response);
                      var arr = this.response;
                      var byteArray = new Uint8Array(arr);
                      // create `objectURL` of `this.response` : `.pdf` as `Blob`
                      var file = window.URL.createObjectURL(new Blob([byteArray]));
                      var a = document.createElement("a");
                      a.href = file;
                      a.download = this.response.name || fileNameTemp;
                      document.body.appendChild(a);
                      a.click();
                    }
                }
                request.send();
    
    请注意,必须存储和下载所有类型的文件