【发布时间】:2011-10-22 03:10:03
【问题描述】:
我有一个基本的 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);
【问题讨论】:
-
你在上传什么?文本数据还是二进制数据?
-
@tjamenson 二进制数据——任何真正的 'word 文档' 'pdf' 'image' 等等。我打算在另一个变量中分配文件名,但我开始怀疑我是否有一些致命的缺陷据我了解上传表单和 html 的可能性 - 这种方法是否完全不可行,并且无法通过将文件数据作为字符串发布来传输文件数据?也没有我正在阅读的 HTML5 有一些解决方案 -
-
有趣。为什么您在浏览器和服务器之间使用 base-64 编码,并试图在浏览器中完成此操作?似乎如果您尝试保护数据,SSL 会更容易,因为它会通过网络加密所有 HTTP 数据(包括文件)。如果您的数据库需要,您可以使用 base-64 服务器端。
-
@William 我不是要保护数据,只是将其转换为正确的格式。 Salesforce.com(Apex 平台)要求在数据库中创建记录之前对数据库进行 base64 编码,它们通过表单对文件数据进行 base64 编码的功能记录很差(我想出了如何去做这在问了这个问题之后)。无论如何,看起来 base64 编码二进制文件数据仅在 HTML5 或 Mozilla File API 中受本地支持
-
好的,现在我明白你为什么需要这个了。没有中间服务器 + 疯狂的云需求 + 没有跨浏览器解决方案 = 1 乱七八糟。对不起。
标签: javascript html file-upload base64