浏览器控制台说'FileReader'上的readAsBinaryString':参数1不是'Blob'类型

时间:2018-05-30 04:42:49

标签: filereader

 getFiletoValidate = () => {
 const fName = this.props.fileName;
 const selectFile = this.props.selectedFile;
 const inputValue = this.fileInput.value;
 const providernameId = this.props.endL4;
 const messsageTypeId = this.props.endType;

 var read = new FileReader();
 read.readAsBinaryString(selectFile);

if (inputValue === "") {
  window.Notification.showWarning("Warning,Please choose a file to      validate");
} else 
{

  setTimeout(function() {
    api.messageValidator(fName, providernameId, messsageTypeId, read.result,this.handleFileSuccessResponse,this.handleFileFailResponse);
    }, 2000);        
}}

我使用readAsBinaryString来获取文件数据,但问题是浏览器控制台在'FileReader'上说readAsBinaryString':参数1不是'Blob'类型。任何人请帮忙解决

3 个答案:

答案 0 :(得分:1)

是的,我同意这两点。在我看来,使用同步方法不是一个好选择,因为想想

  1. 如果您的输入文件已损坏,则代码会卡在该文件读取器代码中,这就是为什么您的页面被破坏而没有任何问题
  2. 如果有人输入像2GB这样的大文件你会等很多时间。这不是一个好选择,因为你的表现不好
  3. 您需要使用您选择的任何方法对文件大小进行前端验证

答案 1 :(得分:0)

我认为你的api调用是在完全读取文件之前发生的。所以你可以通过设置超时来轻松解决这个问题但你已经完成了。

我认为您错过了此声明的分配。请尝试使用此代码,它应该正常工作

getFiletoValidate = () => {
  const fName = this.props.fileName;
  const selectFile = this.props.selectedFile;
  const inputValue = this.fileInput.value;
  const providernameId = this.props.endL4;
  const messsageTypeId = this.props.endType;

  var read = new FileReader();
  read.readAsBinaryString(selectFile);

 if (inputValue === "") {
    window.Notification.showWarning("Warning,Please choose a file to validate");
}else 
{

 setTimeout(function() {
   api.messageValidator(fName, providernameId, messsageTypeId,read.result,self.handleFileSuccessResponse,self.handleFileFailResponse);
}, 2000);        
  }
}

答案 2 :(得分:0)

问题是javascript是异步的,所以在你的代码中,在完全读取文件之前api调用命中。 Settimeout是一个处理此问题的选项,但它不是推荐的,因为文件大小很小,你的超时2s是可以的。想想一个大文件是否需要超过2秒才能阅读内容......会发生什么......应该为read.result传递一个空值  因此,您需要尝试使用Synchronization方法来处理

var fs = require("fs");
fs.readFileSync(‘abc.txt’,function(err,data){
if(!err) {
console.log(data);
}
 });
console.log("something else");

在此之前,您需要安装文件流npm并输入fs