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

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

編輯:J2ME

這幾天研究J2ME圖片文件上傳,手機上用FileConnection浏覽文件夾,讀取圖片文件,然後提交到服務器上的http接口。

首先采用的是HttpConnection,發送數據(構建文件上傳方式也一樣),發現數據都被采用了chunked編碼,服務端什麼內容都獲取不到( 這裡遇到一個奇怪的問題,用我本機做服務端,即使chunked編碼,也能夠完整的獲取到數據),chunked只有在數據超過2016個字節的時候才會產生。

於是上網搜集資料,發現mingjava的colala實例采用的是將數據切分為1700字節大小,循環上傳,直到上傳完畢,(這裡不知道mingJava是要做進度故意這麼做,還是當時也遇到chunked編碼的問題才這麼做的)。

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

此主題相關圖片如下:

圖1

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 協議,上傳文件。

此主題相關圖片如下:

圖2

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