| 网站首页 | 文章中心 | 电子书下载 | 矢量图库 | 视频教程 | 素材下载 | 程序代码下载 | JS代码 | 论坛 | 
常用软件类:
|杀毒安全 |联络聊天 |网络软件 |多媒体类 |系统工具 |图形图像 |系统工具 |应用软件 |行业软件
开发设计类:
|动画制作 |图像处理 |3D设计 |操作系统 |站长学院 |网络相关 |WEB设计 |数据库类 |程序开发
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\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通常的写法一样了.不需要做特殊处理了


  • 上一篇文章:

  • 下一篇文章: 没有了
  • 相关文章