这会将base64输出到控制台:
function getBase64(file) {
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function() {
console.log(reader.result);
};
reader.onerror = function(error) {
console.log('Error: ', error);
};
}
var file = document.querySelector('#files > input[type="file"]').files[0];
getBase64(file); // prints the base64 string
来源:https://dev59.com/G1oV5IYBdhLWcg3wauOP#36281449
jsFiddle链接:这里是以上工作代码的jsFiddle演示
我希望能够把base64赋值给一个变量,因此我根据这个答案尝试了以下操作:
function getBase64(file, onLoadCallback) {
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = onLoadCallback;
reader.onerror = function(error) {
console.log('Error when converting PDF file to base64: ', error);
};
}
var my_pdf_file = document.querySelector("#my_pdf_file").files[0];
var my_pdf_file_as_base64 = "";
getBase64(my_pdf_file, function(e) {
my_pdf_file_as_base64 = e.target.result
});
// print out the base64 to show i have captured the value correctly
console.log(my_pdf_file_as_base64);
目前它没有在控制台输出任何内容。
问题:
如何将base64值保存为变量?
编辑:
按要求提供上下文:
我正在Google Apps Script环境中提交表单。
我以前做过这个,并将一个包含文件的表单对象传递给Google Apps Script函数。
但是,这种方法的一个限制是,如果将表单对象作为参数传递,则它是唯一允许的参数。
页面内的表单元素也可以作为参数,但它必须是函数的唯一参数
在这种情况下,我正在通过多个参数传递,其中一个参数将是转换为base64的pdf文件。
针对@Aasmund的好答案,我希望变量赋值阻止进一步的代码执行:
var my_pdf_file = [ converted file here ];
// don't do this stuff until the above variable is assigned
否则,我将不得不重构剩余的代码,以便在
then
块中进行(由@Aasmund建议),但由于在提交表单之前进行了大量验证/变量准备/条件处理,这可能会很混乱/不可能。
reader.readAsDataURL(file);
之后执行以下代码应该可以工作:if (reader.readyState === FileReader.DONE) { console.log(reader.result); window.clearTimeout(timeoutID); } else { console.log("下载中..."); } }, 1000);``` (对于格式问题表示抱歉;似乎注释中无法使用代码块。)
- Aasmund Eldhuset