2014-01-08 91 views
1

我如何使用JavaScript從文件輸入?:獲取文件的輸入值作爲二進制數據

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

我可以成功地訪問上傳文件的細節上載的文件訪問的二進制表示:

$('[name="image"]').get(0).files[0].name 
// "2013-10-19 15.10.59.jpg" 

$('[name="image"]').get(0).files[0].size 
// 774016 

$('[name="image"]').get(0).files[0].type 
// "image/jpeg" 

但不是真正的表示。

我發現this教程,利用了:

document.getElementById("photo").files[0].getAsBinary() 

然而,該方法不存在在我的瀏覽器(Chrome金絲雀34.0.1772.0在OS X 10.9)。

回答

3

的readAsBinaryString方法從https://developer.mozilla.org/en-US/docs/Web/API/File.getAsBinary

非標準 此功能是非標準的,而不是一個標準的軌道。不要在面向Web的生產站點上使用它:它不適用於每個用戶。實現之間也可能存在很大的不兼容性,並且行爲在未來可能會發生變化。

它暗示:

注:此方法已過時;您應該使用FileReader方法readAsBinaryString()或readAsArrayBuffer()來代替。

使用的FileReader:

//Retrieve the first (and only!) File from the FileList object 
    var f = document.getElementById("photo").files[0]; 

    if (f) { 
     var r = new FileReader(); 
     r.onload = function(e) { 
      var contents = e.target.result; 
     alert("name: " + f.name + "n" 
       +"type: " + f.type + "n" 
       +"size: " + f.size + " bytesn" 
       + "starts with: " + contents 
     ); 
     } 
     r.readAsText(f); 

但是,請注意的FileReader API仍然是一個工作草案,所以這不會在所有的瀏覽器。據我所知,目前還沒有支持的方式來執行此操作,您可以考慮使用Ajax上傳文件並使用服務器端語言讀取其內容?

+1

根據W3C 2012年7月12日的工作草案,'readAsBinaryString()'已棄用。 – sk904861

相關問題