ArrayBuffer中的Uint8Array为空

时间:2018-12-19 03:02:23

标签: javascript arrays html5 html5-canvas arraybuffer

我一直在尝试编写一个处理文件的程序,为此,我需要将文件的数组缓冲区转换为Uint8Array。问题是当我运行代码时,数组为空。我正在寻找的数组是fdata数组。 请不要告诉我使用服务器端程序,因为我无法在我正在使用的平台上放置服务器端代码。

<body>
  <input type="file" id="files" name="files[]" multiple />
  <div id="outimg"></div>
  <script>
    function handleFileSelect(evt) {
      var files = evt.target.files;
      console.log(files);
      for (var i = 0, f; f = files[i]; i++) {
        var reader = new FileReader();

        reader.onload = (function(theFile) {
          return function(e) {
            console.log(e.target.result);
          };
        })(f);

        reader.readAsArrayBuffer(f);

        fdata = new Uint8Array(reader.result);

        console.log(fdata);

        window.cvd = [];

        for (var i = 0, n = window.fdata.length; i < n; i += 3) {
          var a = Array.from(window.fdata.slice(i, i + 3));
          a.push(255);
          window.cvd.push(a);
        }


      }
    }

    document.getElementById('files').addEventListener('change', handleFileSelect, false);
  </script>
</body>

1 个答案:

答案 0 :(得分:0)

读取器结果在文件加载时可用,因此请尝试在onload事件处理程序中访问它:

<body>
  <input type="file" id="files" name="files[]" multiple />
  <div id="outimg"></div>
  <script>
    function handleFileSelect(evt) {
      var files = evt.target.files;
      console.log(files);
      for (var i = 0, f; f = files[i]; i++) {
        var reader = new FileReader();

        reader.onload = (function(theFile) {
          return function(e) {
            console.log(e.target.result);
            fdata = new Uint8Array(reader.result);

            console.log(fdata);

            window.cvd = [];

            for (var i = 0, n = window.fdata.length; i < n; i += 3) {
              var a = Array.from(window.fdata.slice(i, i + 3));
              a.push(255);
              window.cvd.push(a);
            }
          };
        })(f);

        reader.readAsArrayBuffer(f);




      }
    }

    document.getElementById('files').addEventListener('change', handleFileSelect, false);
  </script>
</body>