你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / Linux开发
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通常的写法一样了。不需要做特殊处理了。

(编辑:aniston)

  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089