将文件转换为 Base64
Convert file to Base64
所以我正在尝试从标签转换文件。这就是我的 javascript 代码的样子:
var file = document.getElementById("file").files[0];
if (file) {
var filereader = new FileReader();
filereader.readAsDataURL(file);
filereader.onload = function (evt) {
var base64 = evt.target.result;
}
}
那 returns undefined
.
我认为您错过了代码中的 return 语句。
用以下行替换您的函数:
var file = document.getElementById("file").files[0];
if (file) {
var filereader = new FileReader();
filereader.readAsDataURL(file);
filereader.onload = function (evt) {
var base64 = evt.target.result;
return base64
}
}
两个小帮手和一个例子
const blobToDataUrl = blob => new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = () => resolve(reader.result);
reader.onerror = reject;
reader.readAsDataURL(blob);
});
const blobToBase64 = blob => blobToDataUrl(blob).then(text => text.slice(text.indexOf(",")));
for(let file of document.getElementById("file").files) {
blobToBase64(file).then(base64 => console.log(file, base64));
}
但为什么要使用 Promises?
因为您的下一个问题是:How do I get the base64 string out of onload?
,简短的答案是 You don't
。更长的答案是:It's like asking how to get something from the future into the now. You can't.
Promise 是 placeholder/wrapper 最终可用的值; 但还没有。他们是 async functions.
的基础
所以让我们跳过混乱的回调,直接进入你写的地方
for(let file of document.getElementById("file").files) {
const base64 = await blobToBase64(file);
console.log(file, base64);
}
所以我正在尝试从标签转换文件。这就是我的 javascript 代码的样子:
var file = document.getElementById("file").files[0];
if (file) {
var filereader = new FileReader();
filereader.readAsDataURL(file);
filereader.onload = function (evt) {
var base64 = evt.target.result;
}
}
那 returns undefined
.
我认为您错过了代码中的 return 语句。 用以下行替换您的函数:
var file = document.getElementById("file").files[0];
if (file) {
var filereader = new FileReader();
filereader.readAsDataURL(file);
filereader.onload = function (evt) {
var base64 = evt.target.result;
return base64
}
}
两个小帮手和一个例子
const blobToDataUrl = blob => new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = () => resolve(reader.result);
reader.onerror = reject;
reader.readAsDataURL(blob);
});
const blobToBase64 = blob => blobToDataUrl(blob).then(text => text.slice(text.indexOf(",")));
for(let file of document.getElementById("file").files) {
blobToBase64(file).then(base64 => console.log(file, base64));
}
但为什么要使用 Promises?
因为您的下一个问题是:How do I get the base64 string out of onload?
,简短的答案是 You don't
。更长的答案是:It's like asking how to get something from the future into the now. You can't.
Promise 是 placeholder/wrapper 最终可用的值; 但还没有。他们是 async functions.
的基础所以让我们跳过混乱的回调,直接进入你写的地方
for(let file of document.getElementById("file").files) {
const base64 = await blobToBase64(file);
console.log(file, base64);
}