2014-01-12 57 views
1

如果具有输入类型的文件的FileReader readAsBinaryString()到图像DOM元素

<input id="file" type="file" name="file" /> 

和如果一个文件被选择我想从图像的负载读取的Exif数据的图像

<img id="img"> 

它进入img标签。

var $inputFile = $("#file"); 

$inputFile.on("change", function() { 
    var img = document.getElementById("img"); 
    var files = $inputFile[0].files; 

    var reader = new FileReader() 

    reader.onload = function(event) { 
     var file = reader.result; 

     // this is not working 
     img.src = file; 

     var binaryString = reader.result; 
     var oFile = new BinaryFile(binaryString, 0, file.size); 
     var exif = EXIF.readFromBinaryFile(oFile); 

     // read exif data 
    } 
    reader.readAsBinaryString(files[0]); 
}); 

问题是我没有在屏幕上得到任何图像。它只显示如果我使用reader.readAsDataURL(文件[0]);但是我无法使用,因为我需要binaryString作为Exif数据。

如何获取图像标签以显示所选文件是二进制字符串?

回答

3

要以“二进制”形式显示图像,您需要将其作为base62编码的字符串,即“dataURL”。 要使用它的二进制文件,并把它作为src你可以做一个ObjectURL

var objectURL = URL.createObjectURL(blob); 
image.src=objectURL; 

你并不需要这个的FileReader,但你需要的FileReader为您EXIF分析

+0

我试图img.src = URL.createObjectURL(文件);但它显示一个错误:Uncaught TypeError:类型错误reader.onload – confile

+0

它接受一个File或Blob,而不是FileReader对象。请参阅文档 – japrescott

+0

这不会帮助我如何获取文件或blob? – confile