图像大小(.bin)通过AJAX调用生成它时加倍

时间:2017-04-18 05:47:25

标签: javascript ajax bin

我正在尝试从AngularJS中用Swing编写的REST API生成.bin文件。以下是代码。

var options = {
  url: 'http://example.com/imageAPI',
  method: 'POST',
  headers: {
    'Authentication': headerAndPostParams[0],
    'Content-Type': 'application/json',
    'Accept': 'application/octet-stream'
  },
  responseType: 'arraybuffer',
  data: {
    uniqueId: headerAndPostParams[1],
    imageName: headerAndPostParams[2],
    clientMacAddress: headerAndPostParams[3]
  }
};
return $http(options).then(function(sucessResponse) {
  if (sucessResponse.data != "" && sucessResponse.data.responseCode === undefined) {
    download(sucessResponse.data, "image.bin", "application/octet-stream");
    return true;
  }
  return false;
});

以下是响应标题
访问控制 - 允许 - 来源:http://localhost:8080
Content-Disposition:attachment; filename = cns3xxx_md_2.6.9_ac_aa_33_dd_aa_35.bin
内容长度:7864320
内容类型:application / octet-stream
日期:星期二,2017年4月18日06:38:35 GMT
变化:起源
access-control-allow-credentials:true
上面的代码工作正常。但问题是从API发送的图像大小为7.5 MB,从我的UI端生成的图像大小为13.5 MB。在将其赋予donwload函数之前,我们必须执行任何解码吗?
(注意:下载是donwload.js库中的函数。)

1 个答案:

答案 0 :(得分:0)

找到解决方案。实际上$ http服务默认情况下会将响应更改为文本。这使图像的大小翻倍。为了避免它,我们需要添加以下参数。

responseType:“blob”

$http({
  url: 'http://example.com',
  method: 'POST',
  responseType: "blob",
  headers: {
    'Authentication': headerAndPostParams[0],
    'Content-Type': 'application/json',
    'Accept': 'application/octet-stream'
  },
  data: {
    uniqueId: headerAndPostParams[1],
    imageName: headerAndPostParams[2],
    clientMacAddress: headerAndPostParams[3]
  }
}).then(function(sucessResponse) {
  if (sucessResponse.data != "" && sucessResponse.data.responseCode === undefined) {
    var blob = new Blob([sucessResponse.data], {
      type: "application/octet-stream"
    });
    download(blob, headerAndPostParams[2]);
    return true;
  }
  return false;
}, function(response) {
  return false;
});