我有一个基本的HTML表单,可以从中获取一些信息,我正在使用Firebug进行检查。
我的唯一问题是,在将文件数据发送到服务器之前,我正在尝试对其进行base64编码。在那里,数据必须以这种形式保存到数据库。
<input type="file" id="fileupload" />
在 JavaScript+jQuery 中:
var file = $('#fileupload').attr("files")[0];
我基于现有的JavaScript进行了一些操作:.getAsBinary()、.getAsText()、.getAsTextURL。
然而,这些操作都无法返回可用的文本,因为它们包含不可用的“字符” - 我不想在上传文件时出现“后台提交(postback)”,并且我需要将多个表单指向特定的对象,所以通过获取文件并使用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
但是在进行base64编码之前,UTF_8方法会返回错误(或空字符串)。
var encoded = Base64.encode(file);