簡體   English   中英

使用angularjs提取字節數組中的多個文件內容

[英]Extract multiple files content in byte array using angularjs

我正在使用此解決方案將文件解析為字節數組:
這對我有用。
但是我想對多個文件執行此操作

 var pniotApp = angular.module('pniotApp', []); pniotApp.controller('pniotCtrl', function ($scope, $http, $location) { $scope.saveContent = function ($fileContent) { $scope.content = $fileContent; console.log($scope.content); }; }); pniotApp.directive('onReadFile', function ($parse) { return { restrict: 'A', scope: false, link: function (scope, element, attrs) { var fn = $parse(attrs.onReadFile); element.on('change', function (onChangeEvent) { var reader = new FileReader(); reader.onload = function (onLoadEvent) { var buffer = onLoadEvent.target.result; var uint8 = new Uint8Array(buffer); var result = []; for (var i = 0; i < uint8.length; i++) { result.push(uint8[i]); } scope.$apply(function () { fn(scope, { $fileContent: result }); }); }; reader.readAsArrayBuffer((onChangeEvent.srcElement || onChangeEvent.target).files[0]); }); } }; }); 
 <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <input on-read-file="saveContent($fileContent)" type="file"/> 

現在,我想對多個文件執行此操作。 我嘗試替換行reader.readAsArrayBuffer((onChangeEvent.srcElement || onChangeEvent.target).files[0]) ;
與:

 for (j = 0; j < (onChangeEvent.srcElement || onChangeEvent.target).files.length;j++)
                reader.readAsArrayBuffer((onChangeEvent.srcElement || onChangeEvent.target).files[j]);


但是我得到這個錯誤
Uncaught DOMException: Failed to execute 'readAsArrayBuffer' on 'FileReader': The object is already busy reading Blobs.

無法在'FileReader'上執行'readAsArrayBuffer':該對象已經在忙於讀取Blob。

我認為這是正確的行為。 您應該一個接一個地讀取文件,然后重新創建Reader ae

var reader = new FileReader();

所以與其:

for (j = 0; j < (onChangeEvent.srcElement || onChangeEvent.target).files.length;j++)
   reader.readAsArrayBuffer((onChangeEvent.srcElement || onChangeEvent.target).files[j]);

應該是這樣的:

 var files = (onChangeEvent.srcElement || onChangeEvent.target).files;
for (j = 0; j < files.length;j++){
    readerEngine(files[j]);
    }

這里的readerEngine是:

function readerEngine(file_){
  var reader = new FileReader();
  reader.onload = function (onLoadEvent) {
      var buffer = onLoadEvent.target.result;
      var uint8 = new Uint8Array(buffer);     
      var result = [];
      for (var i = 0; i < uint8.length; i++) {
           result.push(uint8[i]);
       }

       scope.$apply(function () {
           fn(scope, {
              $fileContent: result
           });
         });
   };

   reader.readAsArrayBuffer(file_);
}

沒有測試

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM