程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> J2ME實現手機圖片上傳的一些小經驗

J2ME實現手機圖片上傳的一些小經驗

編輯:關於JAVA

這幾天研究j2me圖片文件上傳,手機上用FileConnection浏覽文件夾,讀取圖片文件,

然後提交到服務器上的http接口.

首先采用的是 HttpConnection ,發送數據(構建文件上傳方式也一樣), 發現數據都被采用了 chunked 編碼,

服務端什麼內容都獲取不到( 這裡遇到一個奇怪的問題,用我本機做服務端,即使chunked編碼,也能夠完整的獲取到數據),

chunked只有在數據超過2016個字節的時候才會產生.

於是上網搜集資料,發現mingjava的colala實例采用的是將數據切分為 1700 字節大小,循環上傳,直到上傳完畢,

(這裡不知道mingjava是要做進度故意這麼做,還是當時也遇到chunked編碼的問題才這麼做的. hh )

還有網上討論的 http/1.1 http/1.0的問題,好像也是錯誤的.因為用socket數據,設置http/1.1 http/1.0 結果都是一樣的.

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.setRequestProperty("User-Agent", "J2me/Client");
      conn.setRequestMethod(HttpConnection.POST);
      os = conn.openOutputStream();
      os.write(data);

所以只好采用socket,模擬http 協議,上傳文件

StringBuffer sb=new StringBuffer();

sb.append("POST ");sb.append(URL.query);sb.append(" HTTP/1.1\r\n");

sb.append("Host: ");sb.append(URL.host);sb.append("\r\n");

sb.append("Content-type: application/octet-stream\r\n");

sb.append("Content-Length: ");sb.append(data.length);sb.append("\r\n");

sb.append("Connection: close\r\n\r\n");

sc = (SocketConnection)Connector.open("socket://"+URL.host+":"+URL.port);

is = sc.openInputStream();

os = sc.openOutputStream();

os.write(sb.toString().getBytes());

os.write(data);

經過測試成功,構建文件上傳數據流格式也沒有問題.... 這樣服務端的程序就和web通常的寫法一樣了.不需要做特殊處理了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved