- 浏览: 131041 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
bushinagewo:
...
Hadoop Eclipse Plugin Connect Fail 连接namenode失败 -
feng_tai_jun:
谢谢你的解决思路
Hadoop Eclipse Plugin Connect Fail 连接namenode失败 -
wuxifu001:
...
Android 程序使用http上传文件 -
fff5706:
好厉害好厉害
Hadoop Eclipse Plugin Connect Fail 连接namenode失败 -
fff5706:
Boss Xu, LC_ALL最好不要改他,不然乱码。。。然后 ...
Ubuntu Hadoop 集群 部署
Android程序使用http上传文件
有时,在网络编程过程中需要向服务器上传文件。Multipart/form-data是上传文件的一种方式。
Multipart/form-data其实就是浏览器用表单上传文件的方式。最常见的情境是:在写邮件时,向邮件后添加附件,附件通常使用表单添加,也就是用multipart/form-data格式上传到服务器。
内容如下:
Type:multipart/form-data; boundary=-----------------------------265001916915724
-----------------------------265001916915724
Content-Disposition: form-data; name="uploadfile1"; filename="web.txt"
Content-Type: text/plain
ChinaNetSNWide
å网æ©ç 255.255.255.255 ç®å•çš„说四个255是全广æ’IP地åã‚就是用æ¥ä»DHCPæœ åŠ¡å™¨é‚£é‡Œè•å–IP地åã‚
默认网关0.0.0.0 å³æœ¬æœº
-----------------------------265001916915724
Content-Disposition: form-data; name="uploadfile2"; filename="20080116064637581.jpg"
Content-Type: image/jpeg
ÿØÿà
-----------------------------265001916915724—
注意点一:
Header 下面boundary 有27个 -(横杆)
POST Data 下面传输每个文件的开头是有29个 -
注意点二:
观察POST Data可以发现从第一个-----------------------------265001916915724
到第二个-----------------------------265001916915724之间为一个txt文件的相关
信息。
上面form提交的servlet不用实现,只是解析了http协议,为下面模拟铺垫。
下面实现android客户端上传图片到服务端的servlet
android客户端代码
服务端servlet
有时,在网络编程过程中需要向服务器上传文件。Multipart/form-data是上传文件的一种方式。
Multipart/form-data其实就是浏览器用表单上传文件的方式。最常见的情境是:在写邮件时,向邮件后添加附件,附件通常使用表单添加,也就是用multipart/form-data格式上传到服务器。
<form action=“/TestWeb/command=UpdatePicture” method=”post” enctype=”multipart/form-data”> <input type=”file” name=”uploadfile1”/><br> <input type=”file” name=”uploadfile2”/><br> <input type=”submit” value=”uploadfile”> </form>
内容如下:
Type:multipart/form-data; boundary=-----------------------------265001916915724
-----------------------------265001916915724
Content-Disposition: form-data; name="uploadfile1"; filename="web.txt"
Content-Type: text/plain
ChinaNetSNWide
å网æ©ç 255.255.255.255 ç®å•çš„说四个255是全广æ’IP地åã‚就是用æ¥ä»DHCPæœ åŠ¡å™¨é‚£é‡Œè•å–IP地åã‚
默认网关0.0.0.0 å³æœ¬æœº
-----------------------------265001916915724
Content-Disposition: form-data; name="uploadfile2"; filename="20080116064637581.jpg"
Content-Type: image/jpeg
ÿØÿà
-----------------------------265001916915724—
注意点一:
Header 下面boundary 有27个 -(横杆)
POST Data 下面传输每个文件的开头是有29个 -
注意点二:
观察POST Data可以发现从第一个-----------------------------265001916915724
到第二个-----------------------------265001916915724之间为一个txt文件的相关
信息。
上面form提交的servlet不用实现,只是解析了http协议,为下面模拟铺垫。
下面实现android客户端上传图片到服务端的servlet
android客户端代码
public void upload() { Log.d(TAG, "upload begin"); HttpURLConnection connection = null; DataOutputStream dos = null; FileInputStream fin = null; String boundary = "---------------------------265001916915724"; // 真机调试的话,这里url需要改成电脑ip // 模拟机用10.0.0.2,127.0.0.1被tomcat占用了 String urlServer = "http://10.0.0.2:8080/TestWeb/command=UpdatePicture"; String lineEnd = "\r\n"; String pathOfPicture = "/sdcard/aaa.jpg"; int bytesAvailable, bufferSize, bytesRead; int maxBufferSize = 1*1024*512; byte[] buffer = null; try { Log.d(TAG, "try"); URL url = new URL(urlServer); connection = (HttpURLConnection) url.openConnection(); // 允许向url流中读写数据 connection.setDoInput(true); connection.setDoOutput(true); connection.setUseCaches(true); // 启动post方法 connection.setRequestMethod("POST"); // 设置请求头内容 connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("Content-Type", "text/plain"); // 伪造请求头 connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary); // 开始伪造POST Data里面的数据 dos = new DataOutputStream(connection.getOutputStream()); fin = new FileInputStream(pathOfPicture); Log.d(TAG, "开始上传images"); //--------------------开始伪造上传images.jpg的信息----------------------------------- String fileMeta = "--" + boundary + lineEnd + "Content-Disposition: form-data; name=\"uploadedPicture\"; filename=\"" + pathOfPicture + "\"" + lineEnd + "Content-Type: image/jpeg" + lineEnd + lineEnd; // 向流中写入fileMeta dos.write(fileMeta.getBytes()); // 取得本地图片的字节流,向url流中写入图片字节流 bytesAvailable = fin.available(); bufferSize = Math.min(bytesAvailable, maxBufferSize); buffer = new byte[bufferSize]; bytesRead = fin.read(buffer, 0, bufferSize); while(bytesRead > 0) { dos.write(buffer, 0, bufferSize); bytesAvailable = fin.available(); bufferSize = Math.min(bytesAvailable, maxBufferSize); bytesRead = fin.read(buffer, 0, bufferSize); } dos.writeBytes(lineEnd+lineEnd); //--------------------伪造images.jpg信息结束----------------------------------- Log.d(TAG, "结束上传"); // POST Data结束 dos.writeBytes("--" + boundary + "--"); // Server端返回的信息 System.out.println("" + connection.getResponseCode()); System.out.println("" + connection.getResponseMessage()); if (dos != null) { dos.flush(); dos.close(); } Log.d(TAG, "upload success-----------------------------------------"); } catch (Exception e) { e.printStackTrace(); Log.d(TAG, "upload fail"); } }
服务端servlet
import java.io.File; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; // 利用该组件进行接收客户端上传的文件 // 需要自己加载commons-fileupload-1.2.2.jar和commons-io-2.1.jar import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; /** * Servlet implementation class ReceivePictureFromAndroid */ @WebServlet("/command=UpdatePicture") public class ReceivePictureFromAndroid extends HttpServlet { private static final long serialVersionUID = 1L; public ReceivePictureFromAndroid() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); List<FileItem> list = upload.parseRequest(request); System.out.println(list + " list " + list.size() ); for(FileItem item : list) { String paramName = item.getFieldName(); System.out.println(paramName); String paramValue = item.getString(); System.out.println(paramValue); if(item.isFormField() == false) { File f = new File("f:\\img.jpg"); item.write(f); System.out.println("write filt success"); } } } catch (Exception e) { e.printStackTrace(); } } }
发表评论
-
Java && Java Web 路径相关问题
2012-12-05 12:01 1732问题描述: java web工程中的普通java类需要读取配置 ... -
MySQL 时间日期相关
2012-11-06 14:51 1890java.util.Date,+java.util.Calen ... -
Java Log 详解
2012-05-04 14:13 02012/05/04 java.util.logging.L ... -
Eclipse related topic
2012-02-14 12:19 0API and Source Code project-> ... -
Java 时间格式化
2012-01-17 14:42 5677偶尔需要格式化时间,所以这里把网上的经验都集中起来,方便自己查 ... -
Android GPS坐标 画路线
2011-12-09 23:58 6743问题描述:使用成百上千个GPS坐标画路线,在android上的 ... -
Tomcat
2011-12-01 20:24 2553时隔半年,重拾Java Web,避免不了tomcat了。 这 ... -
Android 调用系统Camera 程序照相,获取照片
2011-11-29 23:40 7913下面是我自己整理的源码,网络上好多不能够运行,或者有bug。 ... -
Android Canvas draw onDraw
2011-11-16 18:52 0Manually render this view (and ... -
Android Activity lifecycle 生命周期
2011-11-13 16:52 3239理解Activity生命周期,有助于在开发软件的过程正确处理逻 ... -
生产者与消费者问题 线程基础篇
2011-11-08 19:50 1283在程序中的多个线程一般是为了完成一个或一些共同的目标而同时存在 ... -
生产者与消费者问题 线程基础篇
2011-11-08 19:49 87线程常涉及的若干方法 Object notify() // ... -
ItemizedOverlay Demo Example OverlayItem Overlay
2011-11-06 20:05 2696Differecnes between ItemizedOve ... -
Android SharedPreferences SharedPreferences.Editor demo 长期持有程序配置信息
2011-11-04 13:26 1644一般Android软件都提供几个配置选项给用户选择,用到的是S ... -
the application has stopped unexpectedly
2011-11-03 18:59 4751这两天和同学在搞一个程序,这之间合并出了太多问题啊。先是在em ... -
Java 深复制 浅复制 api解读
2011-11-03 16:29 1434今天看了下java下面的深 ... -
Android 修改 AndroidManifest package
2011-11-02 23:09 9193不经意之间修改了AndroidManifest.xml,确切的 ... -
Collection Set List HashSet TreeSet ArrayList LinkedList Map HashMap TreeMap
2011-11-02 12:45 1520好久没有翻过书了,Set,List,Map的概念早已混淆的不行 ... -
Handler Runnable Demo 学习
2011-11-01 19:34 3778<?xml version="1.0&qu ...
相关推荐
修改好的移动端android和服务端java上传文件程序,赋带有文档说明,支持批量上传文件和带参数,服务端用的servlet3.0
Android程序研发源码Android 手机文件上传示例.zip
一个AndroidHTTP网络传输文件程序,为Android编写,其中的示例说明了如何从网站下载并显示图片及如何上传一个文件。
android调用摄像机拍照并通过httpservlet将图片上传至Pc端的服务器,此代码可以改造成上传文件的程序
Android上传文件到 .net服务器,服务器使用webservice.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
http://blog.csdn.net/yx0628/article/details/10054851 这个是AsyncTask异步上传文件我的博文。 很简单的小demo,在android端程序中把文件路径和服务器IP改成自己的就行。
教你怎么样从网上下载一个应用程序.apk打包文件下载安装到Android手机上。
1.uniapp写视频上传时,小程序端有多视频上传,但是Android和ios没有,当前插件就是解决Android端多视频上传的问题。 2.如果需要iOS端可以进行留言,我再传一下ios多视频的插件。 3.使用方法: let video=uni....
一款android通过http上传文件的程序,附带源代码
Android ZIP文件下载以及解压.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
Android APP开发入门:使用Android Studio环境 配套范例程序,由于上传文件不能超过220M,此处只有1-6章的范例程序,其他的我会分开上传
本范例实现文件上传功能的方法,就是仿真Web应用程序第一个程序中的FORM,以POST的方式对服务器上的接收程序发出request,触发该程序运行文件写入服务器的动作。实现前,需先有一台已假设完成的WEB SERVER,并编写一...
主要为大家详细介绍了Android Http实现文件的上传和下载,感兴趣的小伙伴们可以参考一下
基于Java源码的Android上传文件小模块,运行于Android客户端,用户通过嵌入程序内的上传程序,实现文件上传,学会了本代码,不但可上传限制格式的文件,还可上传指定格式的图片、文件等,android upload程序源代码,...
Android断点下载.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
Android APP开发入门:使用Android Studio环境 配套范例程序,由于上传文件不能超过220M,此处只有13-16章的范例程序,其他的我会分开上传
Android应用源码(精)记事本小程序,加注释,适合阅读.rar Android应用源码Android平台下通过HTTP协议实现断点续传下载.rar Android应用源码Hibernate4Android.rar Android应用源码http、udp、tcp网络交互组件.rar ...
Android APP开发入门:使用Android Studio环境 配套范例程序,由于上传文件不能超过220M,此处只有7-12章的范例程序,其他的我会分开上传
以二进制流的方式接受资源,保存资源到数据库的服务器实现,适用于移动端上传图片或文件,web端上传图片或文件,数据库存储用的是Blob类型
android上传图片 php接收.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。