2013-11-20 14 views
3

我想在chrome上用FormData上傳一個blob。 我正在構建一個Web應用程序。 用戶可以創建一個配置文件並選擇一個化身,這是一個img標籤。 當我試圖做一個ajax請求時,我用圖像構建一個畫布並調用toDataURL。 後來我使用此功能使用FormData上傳blob,文件內容爲空

dataURItoBlob: function(dataURI) { 
     var binary = atob(dataURI.split(',')[1]); 
     var array = []; 
     for(var i = 0; i < binary.length; i++) { 
     array.push(binary.charCodeAt(i)); 
     } 
     return new Blob([new Uint8Array(array)], {type: 'application/octet-stream'}); 
    } 

當斑被創建我把它添加到FORMDATA併發送AJAX查詢(用jQuery)將數據轉換成二進制內容。 問題是,該文件的內容似乎是空的。

------WebKitFormBoundarysToAVAYMLPFfJF96 
Content-Disposition: form-data; name="image"; filename="avatar.png" 
Content-Type: application/octet-stream 


------WebKitFormBoundarysToAVAYMLPFfJF96-- 

使用的FileReader我做了一個斑點和readAsText它實際上具有內容:

�PNG 


IHDR� 
IDATx^���������v�"�`���^[l��N�����׸�k�؁�X�B�[�i�eٜ����yg����E�dF����o~���{�s�sN(�˲�_t�ɤ����݇ns(Z�6ڇ>�O}}��b��l�����ks�̱��r�w�}��{��x<޲}�Q644XNN�;޷�~k7�|��z��V[[�����o�����rss��WTTXII�UWW[^^^��455Yqq���Ը��ߏ>���Xc 
���s��o��Yg�ew�y�566��... 

有沒有人已經遇到過這個問題? 我只是不明白爲什麼查詢發送一個空文件。

+0

Chrome開發人員工具實際上並未在表單數據中顯示文件的內容,您在服務器端腳本中是否收到空文件? – Musa

+0

我不是開發服務器腳本的人。我會問服務器開發人員,但我認爲你是對的。有什麼辦法讓文件記錄在開發者工具中?無論如何,可以發表您的評論作爲答案,以便我可以接受它? – Elendir

回答

6

Chrome開發人員工具實際上並未在表單數據中顯示文件的內容,請檢查服務器端以查看文件是否確實爲空。 Firebug(一個firefox插件)顯示你的一部分文件數據,你也可以使用像fiddler這樣的工具來查看http post主體。

+1

此外,雖然blob是數據,而不是(一定)一個文件,它仍然會作爲文件上傳服務器端到達。例如。在PHP期望它作爲$ _FILES條目而不是$ _POST條目。 (這個和Chrome開發工具沒有看到它的組合,今天花了我幾個小時..) – Arthur