2011-12-29 65 views
0

當我上傳文件的正常方式沒有Ajax,頁面重新加載,和POST請求的有效載荷是這樣的,當我看着它在Chrome元素督察的網絡標籤:如何通過POST以二進制格式正確發送文件?

------WebKitFormBoundaryXseUYiNOVZKdYrTk 
Content-Disposition: form-data; name="fdata[]"; filename="baby_bot.jpg" 
Content-Type: image/jpeg 


------WebKitFormBoundaryXseUYiNOVZKdYrTk 
Content-Disposition: form-data; name="fdata[]"; filename="dyno_bones.png" 
Content-Type: image/png 


------WebKitFormBoundaryXseUYiNOVZKdYrTk-- 

但是,當我嘗試手動創建POST請求,並通過使用FileReader對象以二進制格式讀取文件的內容並通過手動創建的POST請求發送二進制數據,並使用ajax發送文件,負載如下所示:檢查器中:

------CustomFormBoundaryXseUYiNOVZKdYrTk 
Content-Disposition: form-data; name="fdata[]"; filename="baby_bot.jpg" 
Content-Type: image/jpeg 

a2q#¡B±Áð$RÑá3ñ%br4C&Scs¢ÂâÿÄ 

------CustomFormBoundaryXseUYiNOVZKdYrTk 
Content-Disposition: form-data; name="fdata[]"; filename="dyno_bones.png" 
Content-Type: image/png 

a2q#¡B±Áð$RÑá3ñ%br4C&Scs¢ÂâÿÄ 

------CustomFormBoundaryXseUYiNOVZKdYrTk-- 

請注意,您可以看到二進制數據(由那些隨機重音字符)在POST請求的正文中。我怎樣才能讓我手動創建的POST請求是完全相同的到瀏覽器,以便我從我的PHP處理程序腳本得到相同的結果?這裏的想法是,我可以模擬瀏覽器發送的POST請求,而不必修改PHP後端中的任何內容。

+0

我結束了使用FormData對象......更容易上傳文件。如果您使用FileReader,則必須對二進制數據進行一些額外的處理以使其正確傳遞POST請求,與僅使用FormData對象相比,這是一項額外的工作。看看這裏:https://developer.mozilla.org/en/DOM/XMLHttpRequest/Using_XMLHttpRequest#Using_FormData_objects – trusktr 2011-12-29 12:09:52

回答

相關問題