консоль обозревателя сообщает «readAsBinaryString» в «FileReader»: параметр 1 не относится к типу «Blob» - PullRequest
0 голосов
/ 30 мая 2018
 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 для получения данных файла, но проблема в том, что консоль браузера сообщает readAsBinaryString «FileReader»: параметр 1 не относится к типу «Blob».Любой, пожалуйста, помогите решить

Ответы [ 3 ]

0 голосов
/ 01 июня 2018

Проблема в том, что javascript асинхронен, поэтому в вашем коде происходит вызов API, прежде чем полностью прочитать файл.Settimeout - это один из вариантов решения этой проблемы, но он не рекомендуется, потому что размер файла мал, ваш timeout 2s в порядке.Подумайте, нужно ли одному большому файлу более двух секунд для чтения содержимого ... что произойдет ... это должно быть пустое значение для read.result. Поэтому вам нужно попробовать метод синхронизации для обработки, такой как

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

Перед этим необходимо установить поток файлов npm и ввести fs

0 голосов
/ 02 июня 2018

Да, я согласен с обоими.С моей точки зрения, использование метода синхронизации не очень хороший вариант, потому что подумайте

  1. Если ваш входной файл поврежден, вы застряли в коде этой защелки кода, поэтому ваша страница не работает без проблем
  2. Если кто-то вводит большой файл, например 2 ГБ, что-то, что у вас есть, ждет так много времени. Это не очень хороший вариант, потому что у вас плохая производительность

Так что лучший вариант, вам нужно сделать фронтзавершите проверку размера файла любым выбранным вами методом

0 голосов
/ 01 июня 2018

Я предполагал, что ваш вызов 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);        
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...