[英]Access attached file content using ADODB.Stream in Javascript
我有一个Backbone.js项目正在工作,在该项目中,我获得了用户以表单形式附加的文件(在我的html模板中名为file的输入元素),并将内容分配给Backbone模型(而不是直接发送文件)。
使用FileReader的Chrome和Firefox效果很好:
var file_list = $('#device_file').prop('files');
var file_object = file_list[0];
reader = new FileReader();
reader.onload = function(event) {
var contents = event.target.result;
self.model.set("file_data", contents);
self.model.set('_completed', true);
self.onStartImport();
};
reader.readAsBinaryString(file_object);
但是现在我需要使其与Internet Explorer的旧版本兼容。 IE10对FileReader具有部分支持,而较早的版本则没有。
我试图使用ActiveX对象(例如ADODB.Stream),但我遇到的问题是,没有完整的文件路径(出于安全原因,它似乎被隐藏了),我无法访问文件内容以将其分配给我需要的模型属性。 我可以获取文件名,但不能获取路径。
我能想到的唯一解决方案是,请IE用户将要上传的文件放在“已知”文件夹中,例如“ C:\\ MyAppName \\ Files”或类似名称,但这听起来很不雅致。
任何建议表示赞赏:-)
最后,我意识到在IE上,您实际上可以获取附件的完整路径(在Chrome中,您可以得到伪路径)。 因此,这解决了我在IE中的问题:
var fileName = $('#device_file').val();
var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.OpenTextFile(fileName, 1);
var raw_content = f.ReadAll();
self.model.set("file_data", raw_content);
当然,我添加了一些功能检测以使用FileReader(如果有)(从真实的浏览器)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.