javascript - 通过input type = file获取字节数组

标签 javascript html fileapi

var profileImage = fileInputInByteArray;

$.ajax({
  url: 'abc.com/',
  type: 'POST',
  dataType: 'json',
  data: {
     // Other data
     ProfileImage: profileimage
     // Other data
  },
  success: {
  }
})

// Code in WebAPI
[HttpPost]
public HttpResponseMessage UpdateProfile([FromUri]UpdateProfileModel response) {
  //...
  return response;
}

public class UpdateProfileModel {
  // ...
  public byte[] ProfileImage {get ;set; }
  // ...
}
<input type="file" id="inputFile" />

我正在使用 ajax 调用将输入类型 = 文件输入的 byte[] 值发布到以 byte[] 格式接收的 web api。但是,我在获取字节数组时遇到了困难。我希望我们可以通过 File API 获取字节数组。

注意:在通过ajax调用之前,我需要先将字节数组存储在一个变量中

最佳答案

[编辑]

如上评论所述,虽然仍在某些 UA 实现上,readAsBinaryString方法没有达到规范,不应在生产中使用。 相反,使用 readAsArrayBuffer并循环遍历它的 buffer取回二进制字符串:

document.querySelector('input').addEventListener('change', function() {

  var reader = new FileReader();
  reader.onload = function() {

    var arrayBuffer = this.result,
      array = new Uint8Array(arrayBuffer),
      binaryString = String.fromCharCode.apply(null, array);

    console.log(binaryString);

  }
  reader.readAsArrayBuffer(this.files[0]);

}, false);
<input type="file" />
<div id="result"></div>

有关将 arrayBuffer 转换为二进制字符串的更可靠方法,您可以引用 this answer .


[旧答案] (已修改)

是的,文件 API 确实提供了一种转换文件的方法,在 <input type="file"/> 中到二进制字符串,感谢 FileReader对象及其方法 readAsBinaryString .
[但不要在生产中使用它!]

document.querySelector('input').addEventListener('change', function(){
    var reader = new FileReader();
    reader.onload = function(){
        var binaryString = this.result;
        document.querySelector('#result').innerHTML = binaryString;
        }
    reader.readAsBinaryString(this.files[0]);
  }, false);
<input type="file"/>
<div id="result"></div>

如果你想要一个数组缓冲区,那么你可以使用 readAsArrayBuffer() 方法:

document.querySelector('input').addEventListener('change', function(){
    var reader = new FileReader();
    reader.onload = function(){
        var arrayBuffer = this.result;
      console.log(arrayBuffer);
        document.querySelector('#result').innerHTML = arrayBuffer + '  '+arrayBuffer.byteLength;
        }
    reader.readAsArrayBuffer(this.files[0]);
  }, false);
<input type="file"/>
<div id="result"></div>

关于javascript - 通过input type = file获取字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32556664/

相关文章:

javascript - 使用 Vue 和 Jest/Vue 测试工具模拟 API 调用

javascript - 暂停 Javascript 计时器

javascript - NextJS : dynamic router. 路径名不显示路径,但文件名 - 如何获取路径中的单词?

javascript - Angular.js ng-view忽略路由

javascript - 如何在没有 FileReader 的情况下从 Blob 和 File 对象创建 ArrayBuffer 和数据 URI?

javascript - 如何在 D3.js 中操作特定的 SVG 路径

javascript - ngRoute 不工作,但没有向控制台报告错误

javascript - 使用 javascript 从 HTML 转换 Word 文档时添加图像时遇到问题

android - 使用phonegap file api遍历SD卡中的每个文件

javascript - 如何使用 Javascript 和 HTML 5 按名称加载本地文本文件的内容?