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'类型。任何人请帮忙解决
答案 0 :(得分:1)
您需要使用您选择的任何方法对文件大小进行前端验证
答案 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