如何在JavaScript中从二进制数据创建文件对象

7

我可能错过了一些简单的东西,但是如果我从一个AJAX请求接收到二进制数据,我该如何在JavaScript中创建一个File对象?

$.ajax({
  url: "http://example.com/image.jpg",
  success: function(data) {
    // Convert binary data to File object
  }
});

这似乎很相关:https://dev59.com/Lmoy5IYBdhLWcg3wsP_Q - Jonah
1个回答

12

我终于弄明白了。为了避免跨站脚本攻击问题,我在我的服务器上创建了一个代理端点。然后我可以将图片URL传递给我的服务器,服务器会执行远程文件的GET请求,将响应转换为Base64,然后将其发送回浏览器。浏览器可以将数据转换回二进制并创建一个Blob(对于我的目的来说与File一样好用)。

$.ajax({
  url: apiRoot + "/proxy",
  data: {url: "http://example.com/image.jpg"},
  success: function(data) {
    var binary = atob(data.split(',')[1]);
    var array = [];
    for (var i = 0; i < binary.length; i++) {
      array.push(binary.charCodeAt(i));
    }
    var file = new Blob([new Uint8Array(array)], {type: 'image/jpeg'});
  }
});

3
如果我使用 var file = new File([new Uint8Array(array)], {type: 'image/jpeg'});,我该如何获取图片的名称? - jofftiquez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接