回答

3

據我所知,Volley不是將大量數據(如圖像)發送到遠程服務器的正確選擇。無論如何,如果你想發送圖像,你應該擴展Request類並實現你的邏輯。 你可以拿一些在工具箱包中可用的類作爲例子。 否則,您可以使用HttpURLConnection類並實現你的邏輯,你首先要設置:

con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary); 

其中邊界是你喜歡的字符串。 然後,您必須從連接中獲取輸出流並開始編寫您的零件。

public void addFilePart(String paramName, String fileName, byte[] data) throws Exception { 
os.write((delimiter + boundary + "\r\n").getBytes()); 
os.write(("Content-Disposition: form-data; name=\"" + paramName + "\"; filename=\"" + fileName + "\"\r\n" ).getBytes()); 
os.write(("Content-Type: application/octet-stream\r\n" ).getBytes()); 
os.write(("Content-Transfer-Encoding: binary\r\n" ).getBytes()); 
os.write("\r\n".getBytes()); 

os.write(data); 

os.write("\r\n".getBytes()); 

} 依此類推。 我寫了一篇關於它的教程(因爲你在問一個鏈接)。你可以看看here

如果你不喜歡HttpUrlConnection,你可以更容易地使用Apache Http客戶端。

HttpClient client = new DefaultHttpClient(); 
HttpPost post = new HttpPost(url); 

然後:

MultipartEntity multiPart = new MultipartEntity(); 
multiPart.addPart("param1", new StringBody(param1)); 
multiPart.addPart("param2", new StringBody(param2)); 
multiPart.addPart("file", new ByteArrayBody(baos.toByteArray(), "logo.png")); // Your image 

希望它可以幫助你!

+5

請問你是否準確,並告訴我們爲什麼你認爲凌空不是發送大量數據的正確選擇? (imho圖像中等,不大) – WarrenFaith

0

您可以擴展Request的子類,並覆蓋getBody()方法,並在getBody()方法中返回圖像的字節數據。

+0

嗨@footman,你介意分享你如何得到這個工作?我在使用Volley將圖像發佈到服務器時遇到了問題。總是得到400響應。介意分享? – ito

0

可以使用volley lib將圖像發送到服務器,而無需使用Multipart類。 您只需將base64格式的圖像發送至服務器即可。 它爲我工作。

+0

Base64不是將圖像傳遞到Web服務的好方法。它只適用於小圖片。一旦你開始處理更大的圖像,你就會遇到各種各樣的問題(請求實體大等) –

相關問題