Javascript-FileReader如何在多个文件中一次读取和处理每个文件
我试着让用户删除多个excel文件,从每个文件中提取所需的值,然后一次上传一个文件到网站 我的代码不工作,我假设这是因为回调问题 有人能帮忙吗 编辑:我还添加了我的上传文件功能。我非常感谢你的帮助Javascript-FileReader如何在多个文件中一次读取和处理每个文件,javascript,ajax,filereader,onload,Javascript,Ajax,Filereader,Onload,我试着让用户删除多个excel文件,从每个文件中提取所需的值,然后一次上传一个文件到网站 我的代码不工作,我假设这是因为回调问题 有人能帮忙吗 编辑:我还添加了我的上传文件功能。我非常感谢你的帮助 for(var i = 0; i < fileList.length; i++) { //console.log(fileList[i]["file"]); var reader = new FileReader(); v
for(var i = 0; i < fileList.length; i++) {
//console.log(fileList[i]["file"]);
var reader = new FileReader();
var f = fileList[i]["file"];
//var fName = fileList[i]["fileName"];
var excelObject = fileList[i];
reader.onload = function(ev) {
var data = ev.target.result;
if(!rABS) data = new Uint8Array(data);
var wb = XLSX.read(data, {type: rABS ? 'binary' : 'array'});
var einAddress = "B3";
var engCodeAddress = "B1";
var goAddress = "B2";
var errMsg = tabName + " tab or required value is missing";
// Worksheet with the necessary info
try{
var ws = wb.Sheets[tabName];
var ein_cell = ws[einAddress];
ein = (ein_cell ? ein_cell.v.toString() : undefined);
var eng_cell = ws[engCodeAddress];
engCode = (eng_cell ? eng_cell.v.toString() : undefined);
var go_cell = ws[goAddress];
goLocator = (go_cell ? go_cell.v.toString() : undefined);
if(ein == undefined || engCode == undefined || goLocator == undefined){
hasValues = false;
}
excelObject["EngagementCode"] = engCode;
excelObject["GoSystem"] = goLocator;
excelObject["EIN"] = ein;
if(hasValues && isValid){
uploadFile(fileList[i], userInfo);
} else {
noValueErrorHandler(errMsg);
}
} catch(err){
hasValues = false;
}
};
if(rABS) reader.readAsBinaryString(f); else reader.readAsArrayBuffer(f);
}
function uploadFile(f, userInfo) {
// Define the folder path for this example.
var serverRelativeUrlToFolder = listName;
// Get info of the file to be uploaded
var file = f;
var fileInput = file["file"];
var newName = file["fileName"];
var ein = file["EIN"];
var engCode = file["EngagementCode"];
var email = userInfo;
var goLocator = file["GoSystem"];
console.log("file: " + file);
// Get the server URL.
var serverUrl = _spPageContextInfo.siteAbsoluteUrl + "/StatusTracker";
// Initiate method calls using jQuery promises.
// Get the local file as an array buffer.
var getFile = getFileBuffer(fileInput);
getFile.done(function (arrayBuffer) {
// Add the file to the SharePoint folder.
var addFile = addFileToFolder(arrayBuffer, newName);
addFile.done(function (file, status, xhr) {
// Get the list item that corresponds to the uploaded file.
var getItem = getListItem(file.d.ListItemAllFields.__deferred.uri);
getItem.done(function (listItem, status, xhr) {
// Change the display name and title of the list item.
var changeItem = updateListItem(listItem.d.__metadata);
changeItem.done(function (data, status, xhr) {
processedCount += 1;
if (processedCount < fileCount) {
uploadFile(fileList[processedCount], email);
} else if (processedCount == fileCount){
$("#dropbox").text("Done, drop your next file");
$("#ADMNGrid").data("kendoGrid").dataSource.read();
fileList = [];
alert("Total of " + processedCount + " items are processed!");
}
// Refresh kendo grid and change back the message and empty fileList
//$("#dropbox").text("Drag your Fund/Lower Tier workpaper here ...");
//location.reload(true);
});
changeItem.fail(onError);
});
getItem.fail(onError);
});
addFile.fail(onError);
});
getFile.fail(onError);
for(var i=0;i
您可以将整个过程放入一个异步
函数,并在每次迭代中等待
一个承诺
,强制以串行方式处理文件。您没有发布您的上传文件
,但如果您让它返回一个承诺
,一旦它完成,您可以执行以下操作:
async fn() {
for (var i = 0; i < fileList.length; i++) {
await new Promise((resolve, reject) => {
//console.log(fileList[i]["file"]);
var reader = new FileReader();
var f = fileList[i]["file"];
//var fName = fileList[i]["fileName"];
var excelObject = fileList[i];
reader.onload = function(ev) {
var data = ev.target.result;
if (!rABS) data = new Uint8Array(data);
var wb = XLSX.read(data, {
type: rABS ? 'binary' : 'array'
});
var einAddress = "B3";
var engCodeAddress = "B1";
var goAddress = "B2";
var errMsg = tabName + " tab or required value is missing";
// Worksheet with the necessary info
try {
var ws = wb.Sheets[tabName];
var ein_cell = ws[einAddress];
ein = (ein_cell ? ein_cell.v.toString() : undefined);
var eng_cell = ws[engCodeAddress];
engCode = (eng_cell ? eng_cell.v.toString() : undefined);
var go_cell = ws[goAddress];
goLocator = (go_cell ? go_cell.v.toString() : undefined);
if (ein == undefined || engCode == undefined || goLocator == undefined) {
hasValues = false;
}
excelObject["EngagementCode"] = engCode;
excelObject["GoSystem"] = goLocator;
excelObject["EIN"] = ein;
if (hasValues && isValid) {
uploadFile(fileList[i], userInfo)
.then(resolve);
} else {
noValueErrorHandler(errMsg);
reject();
}
} catch (err) {
hasValues = false;
reject();
}
};
if (rABS) reader.readAsBinaryString(f);
else reader.readAsArrayBuffer(f);
});
}
}
async fn(){
对于(var i=0;i{
//log(文件列表[i][“文件”]);
var reader=new FileReader();
var f=文件列表[i][“文件”];
//var fName=fileList[i][“fileName”];
var excelObject=fileList[i];
reader.onload=功能(ev){
var数据=ev.target.result;
如果(!rABS)数据=新的UINT8阵列(数据);
变量wb=XLSX.read(数据{
类型:rABS?“二进制”:“数组”
});
var einadress=“B3”;
var engCodeAddress=“B1”;
var goAddress=“B2”;
var errMsg=tabName+“缺少选项卡或所需值”;
//包含必要信息的工作表
试一试{
var ws=wb.Sheets[tabName];
var ein_cell=ws[einAddress];
ein=(ein_cell?ein_cell.v.toString():未定义);
var eng_cell=ws[engCodeAddress];
engCode=(eng_cell?eng_cell.v.toString():未定义);
var go_cell=ws[goAddress];
goLocator=(go_cell?go_cell.v.toString():未定义);
if(ein==未定义的| | engCode==未定义的| | goLocator==未定义的){
hasValues=false;