【发布时间】:2018-03-23 09:10:54
【问题描述】:
情况:
用户可以选择附加文件的表单,带有一个简单的文件选择器,它在文件被选择后立即将其转换为 Base64 并存储以供以后使用。
var handleFileSelect = function(evt) {
var files = evt.target.files;
var file = files[0];
if (files && file) {
var reader = new FileReader();
reader.onload = function(readerEvt) {
var binaryString = readerEvt.target.result;
konvertierteDatei = btoa(binaryString);
};
reader.readAsBinaryString(file);
}
};
if (window.File && window.FileReader && window.FileList && window.Blob) {
document.getElementById('attachementName').addEventListener('change', handleFileSelect, false);
} else {
alert('Die Datei APIs werden von diesem Browser nicht vollständig unterstützt.');
}
问题
它之前使用了一种糟糕的解决方法,我将 base64 编码文件存储在隐藏的 textarea 中,然后通过获取所述 textarea 的值将其添加到我的 JSON 数据中。
我想通过将编码文件存储在konvertierteDatei 中并稍后将其值添加到数据中来使这个“更好”,但无论如何我都无法正常工作。
解决方案:
编辑:这是一个有效的 sn-p,看起来像 @H.B.是的,我试图从不同的范围访问konvertierteDatei
var handleFileSelect = function(evt) {
var files = evt.target.files;
var file = files[0];
if (files && file) {
var reader = new FileReader();
reader.onload = function(readerEvt) {
var binaryString = readerEvt.target.result;
konvertierteDatei = btoa(binaryString);
document.getElementById("base64textarea").value = btoa(binaryString);
};
reader.readAsBinaryString(file);
}
};
if (window.File && window.FileReader && window.FileList && window.Blob) {
document.getElementById('attachementName').addEventListener('change', handleFileSelect, false);
} else {
alert('Die Datei APIs werden von diesem Browser nicht vollständig unterstützt.');
}
<input class="infrastruktur__input infrastruktur__input---file" id="attachementName" type="file"/>
<br>
<h1>Base64 encoded file</h1>
<textarea id="base64textarea" placeholder="Base64 will appear here" cols="50" rows="15"></textarea>
【问题讨论】:
-
您是否尝试将其存储在浏览器内存中?
-
konvertierteDatei在reader.onload被触发之前不会被分配。你确定这会发生吗? (如果读者遇到错误会发生什么?)另外,您确定btoa(binaryString)按预期工作吗? -
@TimothyGroote:
btoa是一个原生 JS 函数,用于编码为 base-64。 -
我不知道该代码是否有任何问题,除了它在语法上似乎是正确的事实。我需要查看随附的 HTML 来判断您是否尝试以正确的方式获取元素。 (另外,为了帮助我们帮助您,如果您可以发布所有代码以制作一个最小的工作示例,让我们重现您的问题,那就太好了)
-
您的代码按我的预期工作。当我在分配后记录
konvertierteDatei的值时,它会记录base64 值。也许您尝试在错误的范围内或在错误的时间访问该值?
标签: javascript json file variables base64