2012-01-25 155 views
3

我嘗試使用HTTP POST將一些數據發送到服務器。 服務器期望$ _POST ['file']中的二進制數據。通過HTTP POST發送二進制文本和文本數據

 URL url = new URL("http://example.com"); 
     URLConnection connection = url.openConnection(); 
     connection.setDoOutput(true); 
     OutputStream outputStream = connection.getOutputStream(); 
     outputStream.write("file=".getBytes()); 

       //byte[] buffer contains the data 
      outputStream.write(buffer);   
     outputStream.close(); 

是OutputStream.write寫入流的正確方法嗎?我必須處理除緩衝區之外的字符串(「file =」)嗎?

回答

0

是的,要用POST寫文本,您需要寫入`OutputStream。

對於參數,則需要在OutputStream創建鍵值對(與&隔開)的字符串和寫入該數據的字節數組如下:

String parameterString = "file=" + parameters.get("file") + "&" + "other=" + parameter.get("other"); 
outputStream.write(parameterString.getBytes("UTF-8"); //Don't forget, HTTP protocol supports UTF-8 encoding. 
outputStream.flush(); 

要執行文件與URLConnection上傳,請參閱BalusC的文章How to use java.net.URLConnection to fire and handle HTTP requests?

+0

問題是,我必須發送一個二進制文件的集中。我不認爲我可以將它添加到「文件=」,我可以嗎? – Non

+0

不,請參閱我更新後的帖子,瞭解如何進行文件上傳。 –

2

我建議將您的數據轉換爲Base64字符串(與所有系統的兼容性)。

string result = Convert.ToBase64String(Encoding.UTF8.GetBytes(utf8Text));