J2ME实现手机图片上传的一些小经验

文章作者 100test 发表时间 2007:09:06 12:33:07
来源 100Test.Com百考试题网


  这几天研究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结果都是一样的。

  此主题相关图片如下:

J2ME实现手机图片上传的一些小经验(图一)
图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 协议,上传文件。

  此主题相关图片如下:

J2ME实现手机图片上传的一些小经验(图二)
图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通常的写法一样了。不需要做特殊处理了。



相关文章


利用J2ME开发无线蓝牙应用
J2EE程序中的SQL语句自动构造方法讲解
J2ME实现手机图片上传的一些小经验
基于Hibernate和Struts的J2EE应用开发
泛型类型的子类及通配符的使用
详细讲述Java中的克隆
一道华为JAVA比武大赛试题,你能解答吗?
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛