从输入表单获取 Base64 编码文件数据
我有一个基本的HTML表单,从中我可以获取一些我在Firebug中检查的信息。
我唯一的问题是,我试图在将文件数据发送到服务器之前对文件数据进行base64编码,该服务器需要以该形式保存到数据库中。
<input type="file" id="fileupload" />
在 Javascript+jQuery 中:
var file = $('#fileupload').attr("files")[0];
我有一些基于可用javascript的操作:.getAsBinary(),.getAsText(),.getAsTextURL
但是,这些都没有返回可以插入的可用文本,因为它们包含不可用的“字符” - 我不想在上传的文件中发生“回发”,并且我需要有多个针对特定对象的表单,因此获取文件并以这种方式使用Javascript非常重要。
我应该如何获取文件,以便我可以使用广泛使用的Javascript base64编码器之一!?
谢谢
更新 - 在这里开始赏金,需要跨浏览器支持!!!
这是我所在的地方:
<input type="file" id="fileuploadform" />
<script type="text/javascript">
var uploadformid = 'fileuploadform';
var uploadform = document.getElementById(uploadformid);
/* method to fetch and encode specific file here based on different browsers */
</script>
跨浏览器支持的几个问题:
var file = $j(fileUpload.toString()).attr('files')[0];
fileBody = file.getAsDataURL(); // only would works in Firefox
此外,IE 不支持:
var file = $j(fileUpload.toString()).attr('files')[0];
所以我必须替换为:
var element = 'id';
var element = document.getElementById(id);
对于 IE 支持。
这适用于Firefox,Chrome和Safari(但不能正确编码文件,或者至少在发布后文件不会正确显示)
var file = $j(fileUpload.toString()).attr('files')[0];
var encoded = Btoa(file);
也
file.readAsArrayBuffer()
似乎只在 HTML5 中受支持?
很多人建议:http://www.webtoolkit.info/javascript-base64.html
但这只会在UTF_8方法上进行base64编码之前返回错误?(或空字符串)
var encoded = Base64.encode(file);