2014-09-24 27 views
0

這裏服務器是代碼...上傳圖片與Android HttpClient.execute(postRequest)

Bitmap bm = myImageToUpload; 
ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
bm.compress(CompressFormat.JPEG, 100, bos); 
byte[] data = bos.toByteArray(); 

HttpClient httpClient = new DefaultHttpClient(); 
HttpPost postRequest = new HttpPost(myServerURL); 
ByteArrayBody bab = new ByteArrayBody(data, imageName); 

MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 
reqEntity.addPart("uploadedfile", bab); 
reqEntity.addPart("fileName", new StringBody("image")); 
reqEntity.addPart("mimeType", new StringBody("images/jpeg")); 
reqEntity.addPart("extraInfo", new StringBody(extraInfo)); 

postRequest.setEntity(reqEntity); 
HttpResponse response = httpClient.execute(postRequest); 

此代碼上傳我的圖片和其他信息到服務器一起。有一個更好的方法嗎?

我的顧慮 - 速度很慢,有時需要20分鐘才能將大圖片上傳到服務器。服務器上的圖像大小大於原始大小。

至少,我如何上傳圖像,以便服務器上的圖像與我的android設備上的圖像大小完全相同?

+0

這是完整的代碼嗎?我沒有看到任何'.close()'。確保關閉對象。 – 2014-09-24 18:23:46

+0

爲什麼不嘗試使用第三方庫,以確保使所有的工作,因爲你給它一個有效的文件? – Pavlos 2014-09-24 19:07:40

+0

這不是完整的代碼。但是完整代碼中沒有.close()。不是垃圾收集器照顧它嗎?還是應該關閉它們? – 2014-09-24 21:17:39

回答

0
reqEntity.addPart("uploadedfile", new FileBody(new File(myImageToUpload))); 

這可能是更快,讀起來更容易,除非你真的需要字節數組。

+0

謝謝,這是我正在尋找。我已經實現了它,並且上傳速度更快,文件的大小也保持不變。使用字節數組做這件事有什麼好處嗎?我只是好奇原來的程序員爲什麼這樣做。字節數組更安全嗎? – 2014-09-24 21:16:07

+0

字節數組有幾個原始程序員可能需要的功能。它們不僅僅是文件對象,它們是文件系統不可知的,並且它們可以支持隨機訪問 - 但所有這些都是以性能爲代價的,而且你不需要它們。如果您要在字節數組傳輸和流讀/寫之間運行本地速度比較,則出於類似原因,您會看到類似的差異。 – Niali 2014-09-25 21:05:22