首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2ME

J2ME 圖片上傳實戰:HttpConnection 分塊編碼問題與 Socket 解決方案

     編輯:J2ME

使用 HttpConnection 上傳圖片遭遇 chunked 編碼導致伺服端無法解析(資料超過 2016 位元組即觸發)。嘗試設定 HTTP 1.0/1.1、Header 均無效。

問題程式碼 (HttpConnection)

conn = (HttpConnection) Connector.open(server, Connector.READ_WRITE, true);
conn.setRequestProperty("Content-Type", "application/octet-stream");
conn.setRequestProperty("Content-Length", String.valueOf(data.length));
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("Connection", "close"); // 衝突
conn.setRequestMethod(HttpConnection.POST);
os = conn.openOutputStream();
os.write(data);

解決方案:Socket 模擬 HTTP 協定

// 建立 HTTP POST 請求標頭
StringBuffer sb = new StringBuffer();
sb.append("POST ").append(URL.query).append(" HTTP/1.1\r\n");
sb.append("Host: ").append(URL.host).append("\r\n");
sb.append("Content-type: application/octet-stream\r\n");
sb.append("Content-Length: ").append(data.length).append("\r\n");
sb.append("Connection: close\r\n\r\n");

// Socket 連線傳輸
sc = (SocketConnection) Connector.open("socket://" + URL.host + ":" + URL.port);
is = sc.openInputStream();
os = sc.openOutputStream();
os.write(sb.toString().getBytes());
os.write(data);

測試成功,伺服端可按標準 Web 方式處理(如 Servlet request.getInputStream()),無需特殊處理分塊編碼。同樣適用於 multipart/form-data 檔案上傳格式建構。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved