2009-06-02 37 views
5

在Firefox 3中,可以像下面那樣訪問<input type="file">元素的內容。來自輸入元素的文件數據

假定具有以下元件的一種形式:

<input type="file" id="myinput"> 

現在選擇的文件的數據可以與被訪問:

// Get the file's data as a data: URL 
document.getElementById('myinput').files[0].getAsDataURL() 

是否有一個跨瀏覽器的方式來實現相同的事情?

火狐文檔此功能:

+0

什麼是你想實現什麼?瀏覽器中的圖像預覽或Ajax文件上傳? – 2009-06-02 22:05:12

+0

目前的目標是在畫布上繪製圖像。未來,我想我可能想通過Ajax執行上傳。 – Doug 2009-06-02 22:10:25

回答

8

這是可能的,至少瀏覽器,Firefox和Safari:Reading Files。 看到相關jsfiddle

function readBlob(opt_startByte, opt_stopByte) { 

    var files = document.getElementById('files').files; 
    if (!files.length) { 
     alert('Please select a file!'); 
     return; 
    } 
    var file = files[0]; 
    var start = parseInt(opt_startByte) || 0; 
    var stop = parseInt(opt_stopByte) || file.size - 1; 

    var reader = new FileReader(); 

    // If we use onloadend, we need to check the readyState. 
    reader.onloadend = function(evt) { 
     if (evt.target.readyState == FileReader.DONE) { // DONE == 2 
      document.getElementById('byte_content').textContent = _.reduce(evt.target.result, 
       function(sum, byte) { 
        return sum + ' 0x' + String(byte).charCodeAt(0).toString(16); 
       }, ''); 
     document.getElementById('byte_range').textContent = 
      ['Read bytes: ', start + 1, ' - ', stop + 1, 
      ' of ', file.size, ' byte file'].join(''); 
     } 
    }; 

    var blob; 
    if (file.slice) { 
     blob = file.slice(start, stop + 1); 
    }else if (file.webkitSlice) { 
     blob = file.webkitSlice(start, stop + 1); 
    } else if (file.mozSlice) { 
     blob = file.mozSlice(start, stop + 1); 
    } 
    console.log('reader: ', reader); 
    reader.readAsBinaryString(blob); 
    } 

    document.querySelector('.readBytesButtons').addEventListener('click', function(evt) { 
    if (evt.target.tagName.toLowerCase() == 'button') { 
     var startByte = evt.target.getAttribute('data-startbyte'); 
     var endByte = evt.target.getAttribute('data-endbyte'); 
     readBlob(startByte, endByte); 
    } 
    }, false); 
相關問題