使用Javascript中的ADODB.Stream访问附加的文件内容

时间:2013-12-26 17:37:08

标签: javascript jquery html backbone.js

我有一个Backbone.js项目正在工作,我得到一个用户在表单中附加的文件(在我的html模板中名为 files 的输入元素)和将内容分配给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”或类似的东西,但感觉不合适。

任何建议都表示赞赏: - )

1 个答案:

答案 0 :(得分:1)

最后我意识到在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(如果可用)(来自真实浏览器)。