看板 AndroidDev 關於我們 聯絡資訊
※ 引述《yauhh (喲)》之銘言: : 嗨各位,最近處理檔案上傳遇到了問題不知道怎麼解決. : 我採用的上傳方案是用HttpClient,不是HttpURLConnection. : 用Apache HTTP方案中的HttpClient搭配MultiPartEntity, : 可以做出彷彿一個網頁表單那樣,放一個檔案欄位,後面跟著一些註解文字, : 這樣子上傳. 但是這樣子發現,手機中小的檔案很容易上傳, : 但是大的檔案傳不上去. (而程式沒有Exception,而且200 OK.) : 查了一些資料,知道好像有InputStreamEntity可以.setChunked(true) : 變成分塊方式傳輸. 但是該怎麼整合MultiPartEntity和InputStreamEntity呢? : 我原本的程式是 : HttpPost hpo = new HttpPost(url); : MultiPartEntity mupent = new MultiPartEntity(); : mupent.addPart(... : ... : hpo.setEntity(mupent); : HttpPost的entity是否只能塞一個? 能不能在MultiPartEntity中放一些InputStream- : Entity,使得.isChunked為true? 或者,如何直接調整MultiPartEntity為chunked? 我給自己的問題找到答案: MultipartEntity中可以放StringBody, FileBody,也可以放InputStreamBody. 放了FileBody時,我發現 entity.isChunked() 為false entity.isRepeatable() 為true (可以反覆讀取檔案內容) entity.isStreaming() 為false 而放了InputStreamBody,則是 entity.isChunked() 為true entity.isRepeatable() 為false entity.isStreaming() 為true 而 httpClient.execute(httpPost) 得到200 OK卻沒有看到上傳檔案, 其實是自己耍烏龍沒有發現server有檔案格式檢查. 但是講起檔案格式檢查,也有個怪怪的地方: 本來我用JPEG規格定義的magic number (檔案開頭二位元為0xFF 0xD8, 檔案最後二位元為0xFF 0xD9) 來判斷檔案其實是不是JPEG檔, 但是自己手機的照片 /sdcard/DCIM/Camera/*.jpg,上傳之後發現 檔案最後二位元不符合規定的magic number. 這就不知道手機的相機是怎麼處理JPEG了. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.205.0.23 ※ 編輯: yauhh 來自: 61.231.70.252 (04/07 00:18)