我有一个我需要保存的文件列表,以及我需要将readAsDataURL发送到服务器的名称。
问题是我不知道如何使用readAsDataURL的异步性质来实现它。因为要将DATAURL保存到数组,我需要查找文件列表中的文件名。我无法将文件传递给readAsDataURL的异步方法。你怎么写这个适当的工作?最终结果是我想要一个JSZip文件中发送到服务器的文件列表。
function saveFileList(files)
{
for (var i = 0, file; file = files[i]; i++) {
var fr = new FileReader();
fr.onload = function(e){
if (e.target.readyState == FileReader.DONE) {
var tt = e.target.result.split(",")[1];
//update the record in the list with the result
}
};
var pp = fr.readAsDataURL(file);
}
答案 0 :(得分:1)
如果您具有FileList,并且需要获取base64字符串数组,则需要执行此操作
export async function fileListToBase64(fileList) {
// create function which return resolved promise
// with data:base64 string
function getBase64(file) {
const reader = new FileReader()
return new Promise(resolve => {
reader.onload = ev => {
resolve(ev.target.result)
}
reader.readAsDataURL(file)
})
}
// here will be array of promisified functions
const promises = []
// loop through fileList with for loop
for (let i = 0; i < fileList.length; i++) {
promises.push(getBase64(fileList[i]))
}
// array with base64 strings
return await Promise.all(promises)
}
像这样使用它
const arrayOfBase64 = await fileListToBase64(yourFileList)
答案 1 :(得分:0)
你需要另外一个函数,所以你可以传入文件。试试这个:
var reader = new FileReader();
reader.onload = (function(theFile) {
return function(e) {
if(reader.readyState == FileReader.DONE)
alert(theFile.name); // The file that was passed in.
}
};
})(file);
reader.readAsDataURL(file);
答案 2 :(得分:0)
Russell G答案的另一种选择:
var reader = new FileReader();
reader.onload = function(event){
payload = event.target.result;
var filename = file.name, filetype = file.type;//etc
//trigger a custom event or execute a callback here to send your data to server.
};
reader.onerror = function(event){
//handle any error in here.
};
reader.readAsDataURL(file);