- 浏览: 132931 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
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 1774问题描述: java web工程中的普通java类需要读取配置 ... -
MySQL 时间日期相关
2012-11-06 14:51 1938java.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 5723偶尔需要格式化时间,所以这里把网上的经验都集中起来,方便自己查 ... -
Android GPS坐标 画路线
2011-12-09 23:58 6822问题描述:使用成百上千个GPS坐标画路线,在android上的 ... -
Tomcat
2011-12-01 20:24 2607时隔半年,重拾Java Web,避免不了tomcat了。 这 ... -
Android 调用系统Camera 程序照相,获取照片
2011-11-29 23:40 7972下面是我自己整理的源码,网络上好多不能够运行,或者有bug。 ... -
Android Canvas draw onDraw
2011-11-16 18:52 0Manually render this view (and ... -
Android Activity lifecycle 生命周期
2011-11-13 16:52 3291理解Activity生命周期,有助于在开发软件的过程正确处理逻 ... -
生产者与消费者问题 线程基础篇
2011-11-08 19:50 1322在程序中的多个线程一般是为了完成一个或一些共同的目标而同时存在 ... -
生产者与消费者问题 线程基础篇
2011-11-08 19:49 87线程常涉及的若干方法 Object notify() // ... -
ItemizedOverlay Demo Example OverlayItem Overlay
2011-11-06 20:05 2745Differecnes between ItemizedOve ... -
Android SharedPreferences SharedPreferences.Editor demo 长期持有程序配置信息
2011-11-04 13:26 1690一般Android软件都提供几个配置选项给用户选择,用到的是S ... -
the application has stopped unexpectedly
2011-11-03 18:59 4787这两天和同学在搞一个程序,这之间合并出了太多问题啊。先是在em ... -
Java 深复制 浅复制 api解读
2011-11-03 16:29 1482今天看了下java下面的深 ... -
Android 修改 AndroidManifest package
2011-11-02 23:09 9293不经意之间修改了AndroidManifest.xml,确切的 ... -
Collection Set List HashSet TreeSet ArrayList LinkedList Map HashMap TreeMap
2011-11-02 12:45 1573好久没有翻过书了,Set,List,Map的概念早已混淆的不行 ... -
Handler Runnable Demo 学习
2011-11-01 19:34 3817<?xml version="1.0&qu ...
相关推荐
在标题"android大文件分段上传"中提到的方法,是通过使用Socket流将大文件分段进行上传,这是一种有效应对大文件传输问题的策略。下面我们将详细探讨这一技术。 首先,了解Socket的基本概念。Socket是网络编程中的...
2. 多线程上传:为了解决这个问题,开发者可以使用多线程同时上传文件的不同部分。这种方式可以显著缩短总体上传时间,特别是在网络环境不稳定或上传文件较大的情况下。 三、实现多线程上传 1. 使用AsyncTask:...
- 上传文件:调用`S3TransferUtility.upload()`方法,传入目标Bucket名称、对象键(Key)、本地文件路径。例如: ```java S3TransferUtility transferUtility = S3TransferUtility.create(this, s3Client); ...
本篇将详细讲解如何在Android应用中使用Socket进行文件的上传和下载操作。 首先,理解Socket的基本概念:Socket是应用程序与网络协议之间的接口,它允许两个网络应用程序通过TCP/IP协议进行通信。在Android中,我们...
在Android平台上进行文件上传是一项常见的任务,特别是在开发涉及用户交互的应用程序时,如社交媒体应用、云存储服务等。本文将详细讲解如何在Android中实现文件上传功能,主要围绕"android文件上传demo"这一主题,...
在Android应用开发中,...总的来说,实现Android通过HTTP上传文件到服务器涉及客户端的HTTP请求构建和服务器端的Servlet处理。理解这个过程,开发者可以有效地在Android应用中集成文件上传功能,与服务器进行数据交互。
本项目提供的“修改好的移动端android和服务端java上传文件程序”就是一个完整的解决方案,包含了客户端Android应用和基于Servlet 3.0的服务端Java代码。下面我们将详细探讨这个程序的关键知识点。 首先,Android端...
在Android开发中,上传文件是一项常见的任务,尤其在涉及到用户交互、数据同步或者服务端处理时更为重要。这里,我们主要关注的是如何在Android应用程序中实现文件上传到服务器的功能。这个场景通常涉及到网络编程和...
在Android程序开发中,文件上传是一项常见的功能,例如用户可能需要将照片、视频或文档上传到云端服务器。这个"Android程序研发源码Android 手机文件上传示例.zip"压缩包提供了一个关于如何在Android应用中实现文件...
Android上传文件通常涉及`Multipart/form-data`编码方式,这是HTTP协议中用于处理多部分数据的一种格式,常用于文件上传。通过在请求头设置`Content-Type: multipart/form-data`,然后将文件内容作为请求体的一部分...
请求中需要包含上传文件的Content-Type和实际的文件数据。 4. **使用MultipartEntity或RequestBody**:对于包含文件的数据,我们通常使用MultipartEntity(如果你使用的是Apache HttpClient)或RequestBody(如果你...
"android手写Http协议上传文件"这个主题就是关于如何利用Socket编程实现一个简单的HTTP协议来上传本地文件到服务器的过程。下面将详细讲解这个过程涉及的关键知识点。 1. **HTTP协议基础**: HTTP(超文本传输协议...
在Android平台上进行大文件上传是一项常见的任务,尤其在开发音乐分享、视频分享或者备份应用时。本篇将详细探讨如何在Android中实现大文件的高效上传,以200MB文件为例,阐述如何通过Socket通信在3分钟内完成传输。...
在Android平台上,文件上传是一个常见的任务,特别是在移动应用开发中,如社交应用、云存储服务等,都需要用户能够上传图片、文档等数据。本示例将重点讲解如何在Android手机上实现文件上传功能。 首先,我们需要...
本文将详细讲解如何实现Android应用程序上传文件到FTP(File Transfer Protocol)服务器,包括单文件和多文件上传的实现方法。 首先,我们需要理解FTP的基本概念。FTP是一种用于在网络上进行文件传输的标准协议,...
断点续传是指在网络连接中断后,应用程序能够记住上次上传的位置,并从这个位置继续上传,而不是重新开始整个文件的传输。这需要服务器端和客户端之间进行一定的通信,以便保存和恢复上传的状态。 在Android中,...
本教程将详细讲解如何在Android中捕获未被捕获的异常(Uncaught Exceptions)以及如何利用Retrofit网络库实现文件上传。 首先,我们来探讨如何在Android中实现异常捕获。Android系统提供了`Thread....
本教程主要涵盖两个方面:Android手机文件的上传和下载,以及如何使用XAMPP搭建后端服务器。 1. **Android 文件上传下载** Android系统提供了多种API来处理文件的读写和网络通信,如`HttpURLConnection`,`OkHttp`...
3. Multipart/form-data:如果需要上传文件,通常采用Multipart/form-data编码,这样可以同时上传文本数据和二进制文件。Android的OkHttp库支持这种方式,通过RequestBody创建FormData。 4. 文件选择器:在Android...