2009-05-07 90 views
1

我在BlackBerry應用程序中使用J2ME的HttpConnection類將數據發送到Web服務器。我需要發送HTTP請求正文中圖像的內容。在HTTP請求的主體中發送數據失敗

這是我做

  1. 獲取文件的字節數組

  2. 開放的HTTP連接

  3. 集內容類型報頭作爲圖像/ JPEG

  4. 獲取連接的輸出流

  5. 寫字節輸出流

  6. 關閉輸出流和連接

但圖像沒有上傳到服務器。可能是什麼問題呢?

謝謝。

編輯 - 添加代碼

HttpConnection conn = null; 
OutputStream out = null; 

try{ 
    conn = new HttpConnection(Connector.open(myURL)); 
    conn.setRequestProperty("Content-Type", "image/jpeg"); 
    conn.setRequestMethod(HttpConnection.POST); 
    conn.setRequestProperty("Content-Disposition", "form-data"); 
    conn.setRequestProperty("Connection", "Keep-Alive"); 

    out = conn.openOutputStream; 
    out.write(buffer, 0, buffer.length); 
    conn.setRequestProperty("Content-Length", buffer.length); 
    out.flush(); 
} 
catch(Exception e){ 
    e.printStackTrace(); 
} 
finally{ 
    if(out != null) 
     out.close(); 

    if(conn != null){ 
     System.out.println("" + conn.getResponseCode()); 
     conn.close(); 
    } 
} 

編輯

相同的代碼,當我用繩子嘗試一下,工作正常,併發送字符串到服務器。但它仍然是圖像字節的問題。

+0

這可能是服務器端的問題嗎?嘗試用其他方式上傳某些內容,以便確定它。 – kgiannakakis 2009-05-07 09:03:53

+0

試過了。有用。沒有問題的服務器 – lostInTransit 2009-05-07 10:35:43

回答

4

可以從你的列表中缺少了一些東西:

  • 使用HttpConnection.setRequestMethod(HttpConnection.POST)與HttpConnection.setRequestProperty 2和第3集內容長度之間
  • (「內容長度「,...)介於5和6之間。
  • 知道HTTP請求響應代碼可以幫助調試您的問題:在關閉OutputStream但關閉HttpConnection之前調用HttpConnection.getResponseCode()。
+0

謝謝。我已經設置了請求方法。嘗試設置內容的長度,看看是否有幫助。但事實並非如此。雖然我得到了200的響應代碼。添加代碼,如果有幫助 – lostInTransit 2009-05-07 10:48:26

1

你最肯定需要之前設置的所有頭發送POST數據,包括Content-Length頭。

此外,請確保您正在發送對請求有效的標頭,而不是僅響應標頭。

+0

謝謝埃德。正如我在其他回覆的評論中提到的那樣 - 我在設置好所有標題後嘗試過。仍然圖像不轉移... – lostInTransit 2009-05-08 03:35:38

0

您需要對字節進行編碼(最好是Base-64)併發送該字符串。原始字節不可能是http安全的。

然後在服務器上,您需要將它們放回字節數組解碼和做任何你打算用它做(保存爲文件,東西到數據庫等)

2

康恩=新的HttpConnection(連接器。開放(myURL));

此行是錯誤的。 Connection是一個工廠類,它通過查看適當的協議實現來創建新的Connection對象。

HttpConnection conn = (HttpConnection) Connector.open(myURL); 

其餘的代碼似乎沒問題。當你在發佈時,在minimun你需要定義內容類型和內容長度。