2013-01-16 26 views
0

我想从我的计算机上的文件中读取文件并将其存储在变量中。 我目前正在尝试:从url或文件系统读取文件到javascript中的变量

var fr = new FileReader; 

fr.onload = function() { 

    //variable to hold file 
    var data = fr.result; 

    var c=document.getElementById("cvs"); 
    var ctx=c.getContext("2d"); 
    ctx.drawImage(img,0,0,200,180); 
}; 

fr.readAsDataURL("encryptedImage"); 

这是行不通的。我需要这样做,我可以解密我的文件系统上的加密图像。我已经关闭了安全性,因此我的文件系统可以从浏览器中读取。

什么想法?

+0

你是什么意思 “不工作” 吗?你是否收到任何错误讯息? –

+0

在Firefox中我得到NS_ERROR_XPC_BAD_CONVERT_JS:无法转换JavaScript参数arg 0 [nsIDOMFileReader.readAsDataURL]。 – Sagarmichael

+0

在safari我没有得到任何 – Sagarmichael

回答

0

从这里看起来好像要通过将字符串传递给readAsArrayBuffer()来加载本地文件,但它需要一个blob或文件对象。该文件可以通过浏览器文件对话框加载。 步骤如下:选择文件,通过fileReader asArrayBuffer或asDataURL或asBinaryString加载文件...并在代码中操作或使用数据。

对于这个例子,它从本地文件创建一个图像并将其绘制到画布上(如果它是正确的mime类型“image。*”的话)。

我不知道你想应用什么样的编码/解码。但对于数据的自定义操作,我会推荐使用ArrayBuffers和TypeArrays。

与FileReader.readAsDataURL()的例子:http://jsfiddle.net/uvmD7/

<body> 
    <canvas id="cvs" width="200" height="200"></canvas> 
    <input type="file" id="files" name="files[]" multiple /> 
</body> 

和脚本:

document.getElementById('files').addEventListener('change', handleFileSelect, false); 

var fr = new FileReader(); 

function handleFileSelect(evt) { 
    var files = evt.target.files; 
    fr.readAsDataURL(files[0]); 
}; 

fr.onload = function(evt) { 
    // do sth with it 
    var data = evt.target.result; //fr.result 
    img = new Image(); 
    img.src = data; 
    // draw after load 
    img.onload = function() { 
     var c=document.getElementById("cvs"); 
     var ctx=c.getContext("2d"); 
     ctx.drawImage(img,0,0,200,180);  
    }; 
}; 
相关问题