Javascript 在IE9中将用户指定的文件作为字符串读取
我使用HTML5文件API为用户创建了一种机制,让用户从计算机中选择一个文件,然后将其读取为字符串并在应用程序中进行处理。然而,这段代码在IE9中不起作用,所以我正在寻找一个能起作用的解决方案。这是我的代码,它创建了一个文件读取器对象:Javascript 在IE9中将用户指定的文件作为字符串读取,javascript,jquery,file,html,internet-explorer-9,Javascript,Jquery,File,Html,Internet Explorer 9,我使用HTML5文件API为用户创建了一种机制,让用户从计算机中选择一个文件,然后将其读取为字符串并在应用程序中进行处理。然而,这段代码在IE9中不起作用,所以我正在寻找一个能起作用的解决方案。这是我的代码,它创建了一个文件读取器对象: function CreateFileReader(element) { var self=this; // create an input field and insert it into the document thi
function CreateFileReader(element)
{
var self=this;
// create an input field and insert it into the document
this.element=element;
this.element.html('');
var fileBox=$('<input type="file"/>');
this.element.append(fileBox);
// when the contents (file) of the fileBox change, read the file
this.fileBox.change(function () {
if (this.files.length > 0){
if (this.files[0]!=undefined) {
var file=this.files[0];
// set up the file reader
var reader = new FileReader();
reader.file=file;
// specify what happens when the file is loaded
reader.onloadend = self.processFile;
// read the file as a text string
reader.readAsText(file);
}
}
});
}
CreateFileReader.prototype.processFile = function(e) {
// if the file was loaded successfully
if (e.target.error==null && e.target.readyState==2) {
var fileString=e.target.result;
// do some stuff with fileString here
}
}
函数CreateFileReader(元素)
{
var self=这个;
//创建一个输入字段并将其插入文档
这个元素=元素;
this.element.html(“”);
var fileBox=$('');
this.element.append(fileBox);
//当文件盒的内容(文件)更改时,读取文件
this.fileBox.change(函数(){
如果(this.files.length>0){
if(this.files[0]!=未定义){
var file=this.files[0];
//设置文件读取器
var reader=new FileReader();
reader.file=文件;
//指定加载文件时发生的情况
reader.onloadend=self.processFile;
//将文件作为文本字符串读取
reader.readAsText(文件);
}
}
});
}
CreateFileReader.prototype.processFile=函数(e){
//如果文件加载成功
if(e.target.error==null&&e.target.readyState==2){
var fileString=e.target.result;
//在这里使用fileString做一些事情
}
}
如果您能建议在IE9中工作的替代方案,我将不胜感激。您可以使用silverlight后备方案 Javascript:
if (!window.FileReader)
{
content.innerHTML =
'<div style="width: 20em; height: 3em;">' +
'<object id="silverlightFallback" data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">' +
' <param name="source" value="ClientBin/SilverlightFallback.xap"/>' +
' <param name="background" value="white" />' +
' <param name="minRuntimeVersion" value="4.0.50826.0" />' +
' <param name="autoUpgrade" value="true" />' +
' <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50826.0" style="text-decoration:none">' +
' <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/>' +
' </a>' +
'</object>' +
'</div>';
var script = document.createElement("script");
var silverlightFallback = document.getElementById("silverlightFallback");
silverlightFallback.OnLoad = function () {
silverlightFallback.content.FileReader.RegisterCallback(function (arr) { alert(arr); });
};
script.setAttribute("type", "text/javascript");
script.setAttribute("src", "Silverlight.js");
document.getElementsByTagName("head")[0].appendChild(script);
}
相关:和
public partial class MainPage : UserControl
{
private FileReaderFallback _reader = new FileReaderFallback();
public MainPage()
{
InitializeComponent();
HtmlPage.RegisterScriptableObject("FileReader", _reader);
}
private void button1_Click(object sender, RoutedEventArgs e)
{
_reader.OpenFile();
}
}
[ScriptableType]
public class FileReaderFallback
{
private ScriptObject _callback;
[ScriptableMember]
public void RegisterCallback(ScriptObject callback)
{
_callback = callback;
}
public void OpenFile()
{
var dialog = new OpenFileDialog() { Multiselect = false };
var result = dialog.ShowDialog();
if (result == true)
{
ScriptObject arr = HtmlPage.Window.CreateInstance("Array");
using (var s = dialog.File.OpenRead())
{
byte[] buffer = new byte[1024];
int count;
while ((count = s.Read(buffer, 0, buffer.Length)) > 0)
{
Array.ForEach(buffer, b => arr.Invoke("push", (int)b));
}
}
if (_callback != null)
_callback.InvokeSelf(arr);
}
else
{
if (_callback != null)
_callback.InvokeSelf();
}
}
}