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

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

編輯:J2ME

  這幾天研究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
");
      sb.append("Host: ");sb.append(URL.host);sb.append("
");
      sb.append("Content-type: application/octet-stream
");
      sb.append("Content-Length: ");sb.append(data.length);sb.append("
");
      sb.append("Connection: close
");
      
      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