`
nakupanda
  • 浏览: 417055 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

使用HttpURLConnection上传文件

    博客分类:
  • java
阅读更多
使用HttpURLConnection的应用稍加修饰,对服务器来说它就是一个浏览器,接受HTTP请求和发送响应.当我们需要让程序能像使用浏览器一样上传文件到HTTP服务器,使用HttpURLConnection并设置一些参数即可.

使用HttpURLConnection上传文件非常简单,只要把要上传的数据组装成使用浏览器上传时一模一样的"格式",写到输出流就可以了.以下简单讨论一下使用浏览器上传一个文件时发送的数据的"格式"是怎样的.

假定我有一个文本文件 test.txt 内容为
content of test.txt


上传时浏览器发送的格式是

-----------------------------7d65d38307d2
Content-Disposition: form-data; name="myfile"; filename="E:\badboy\test.txt"
Content-Type: text/plain

content of test.txt
-----------------------------7d65d38307d2--



对于这次的文件上传,第1行和第6行是分隔符,他们之间是文件的信息和内容.第2和第3行是文件的一些基本信息,例如这里表单名是myfile文件是E:\badboy\test.txt内容类型为text/plain.第5行开始是文件的内容.

这里的分隔符浏览器是随机生成的,但我们可以给它指定一个,只要在请求的时候给服务器说明一下,然后我们将要发送的数据组装成上述的格式,简单地写进HttpURLConnection的输出流即可完成上传.

有关这部分的内容详见这个网页:http://www.web1357.cn/post/multipartform_data_boundary_post.html

以下是一个简单的演示程序
try
{
			URL url = new URL("http://192.168.1.111:1108/testupload/upload.php"); //文件接收的CGI,不一定是JSP的
			
			HttpURLConnection conn = (HttpURLConnection)url.openConnection();
			conn.setRequestMethod("POST");
			conn.setDoOutput(true);

			String BOUNDARY = "---------------------------7d4a6d158c9"; // 分隔符
			
			
			StringBuffer sb = new StringBuffer();
			sb.append("--");
			sb.append(BOUNDARY);
			sb.append("\r\n");
			sb.append("Content-Disposition: form-data; name=\"myfile\"; filename=\"test.txt\"\r\n");
			sb.append("Content-Type: application/octet-stream\r\n\r\n");
			
			byte[] data = sb.toString().getBytes();
			byte[] end_data = ("\r\n--" + BOUNDARY + "--\r\n").getBytes();
			
			conn.setRequestProperty("Content-Type", "multipart/form-data; boundary="+BOUNDARY); //设置表单类型和分隔符
			conn.setRequestProperty("Content-Length", String.valueOf(data.length + buf.length + end_data.length)); //设置内容长度
			
			os = conn.getOutputStream();
			os.write(data);
			
			
			FileInputStream fis = new FileInputStream(new File("E:/badboy/test.txt")); //要上传的文件
			
			int rn2;
			byte[] buf2 = new byte[1024];
			while((rn2=fis.read(buf2, 0, 1024))>0)
			{	
				os.write(buf2,0,rn2);
				
			}
			
			
			os.write(end_data);
			os.flush();
			os.close();
			fis.close();
			
			//得到返回的信息
			InputStream is = conn.getInputStream();
			
			
			byte[] inbuf = new byte[1024];
			int rn;
			while((rn=is.read(inbuf,0,1024))>0)
			{
				
				System.out.write(inbuf,0,rn);
				
			}
			is.close();

		}
		catch(Exception ee)
		{
			System.out.println("上传出错.");
		}	




如果要实现上传进度监视,暂时我只能使用sun.net.www.protocol.http.HttpURLConnection而不是java.net.URLConnection,因为前者可以分块上传,后者无论如何都是最后一次把数据上传完.相关资料请看http://ferreousbox.iteye.com/blog/157728
分享到:
评论
4 楼 nakupanda 2010-05-29  
fanxch817 写道
你保存到服务器的什么地方去了??

我记得定这篇文章的时候是用一个PHP页面接收的,随便喜欢放哪
3 楼 fanxch817 2010-05-26  
你保存到服务器的什么地方去了??
2 楼 wawame 2009-11-18  
我复制了你的代码(当然要传的文件名什么的还是改了),结果返回错误代码400.
说明是请求头有问题,我也不懂这玩意儿,唉~
1 楼 epan.chen 2009-01-20  

相关推荐

    使用HttpUrlConnection实现上传文件 服务器端代码

    本篇文章将详细讲解如何使用`HttpURLConnection`实现文件上传,同时涉及到服务器端处理上传文件的代码。我们将讨论以下核心知识点: 1. **HttpURLConnection介绍**: `HttpURLConnection`是Java标准库中的类,它是...

    JAVA通过HttpURLConnection 上传和下载文件的方法

    下面是一个使用HttpURLConnection上传文件的示例代码: ```java public class HttpConnectionUtil { public static String uploadFile(String actionUrl, String[] uploadFilePaths) { String end = "\r\n"; ...

    本示例使用HttpUrlConnection实现上传文件

    - **并发上传**:如果需要上传多个文件,可以考虑使用线程或异步任务来实现并发上传。 通过理解以上步骤和注意事项,开发者可以有效地利用HttpURLConnection在Android应用中实现代理文件上传功能。同时,了解服务器...

    Java自带的HttpURLConnection访问接口实现文件上传

    在本文中,我们将深入探讨如何使用HttpURLConnection实现文件上传,同时也会涉及普通参数的传递。 首先,我们需要理解HTTP请求的基本结构。HTTP请求通常由以下几个部分组成:请求行、请求头、空行和请求体。在文件...

    HttpURLConnection servlet 多文件参数 断点上传

    本知识点将深入探讨如何使用`HttpURLConnection`与Servlet协同工作,处理多文件参数以及实现断点上传功能。 首先,`HttpURLConnection`是Java API中的一个核心类,它负责提供HTTP协议的连接功能。相比Apache ...

    Java 中HttpURLConnection附件上传的实例详解

    本文详细介绍了Java 中HttpURLConnection附件上传的实例详解,包括HttpURLConnection简介、附件上传的基本原理、使用HttpURLConnection实现附件上传的示例代码分析、HttpURLConnection附件上传的优点和缺点等。...

    HttpURLConnection读取本地目录上传远程服务器

    本话题主要关注如何使用`HttpURLConnection`来实现从本地目录读取资源并上传到远程服务器的功能。 首先,`HttpURLConnection`是`java.net.URL`类的子类,它可以建立与指定URL所代表的服务器的连接,并执行HTTP协议...

    Android-使用HttpURLConnection实现断点续传

    断点续传是指当下载或上传文件过程中因网络问题中断后,可以从上次中断的位置继续进行,而不是重新开始。这对于大文件传输和节省用户流量非常有帮助。 **步骤1:初始化下载任务** 在Android应用中,我们需要维护一...

    Android移动开发-使用HttpURLConnection实现多线程的下载

    实例Demo程序来示范使用HttpURLConnection实现多线程下载。 使用多线程下载文件可以更快完成文件的下载,因为客户端启动多条线程进行下载就意味着服务器也需要为该客户端提供响应的服务。假设服务器同时最多服务100...

    android HttpURLConnection上传图片demo

    这个"android HttpURLConnection上传图片demo"提供了一个具体的示例,教我们如何使用HttpURLConnection来完成这一任务。HttpURLConnection是Java标准库中的一个类,它允许Android应用程序与HTTP服务器进行通信,执行...

    HttpURLConnection实现三方接口调用,带有FILE文件参数

    HttpURLConnection实现三方接口HTTP调用调用,带有FILE文件参数

    android上传文件

    二、使用HttpURLConnection上传文件 HttpURLConnection是Java标准库中的类,可用于发送HTTP请求。以下是一个简单的文件上传示例: 1. 首先,创建一个包含文件的MultipartEntity,这是HTTP请求中用于处理多部分数据...

    Android程序开发通过HttpURLConnection上传文件到服务器

    在Android中,使用`HttpURLConnection`进行文件上传的步骤如下: 1. 创建`HttpURLConnection`实例并连接到服务器的上传接口URL。 2. 设置请求方法为`POST`。 3. 设置`Content-Type`为`multipart/form-data`,并指定...

    android带进度的文件上传

    二、使用HttpURLConnection上传文件 1. 创建一个`FileInputStream`读取待上传的文件。 2. 配置`HttpURLConnection`,设置请求方法为`POST`,开启输出流,并设置Content-Type为`multipart/form-data`,这是上传文件...

    Android基于HttpUrlConnection类的文件下载实例代码

    Android操作系统中,文件下载是一种常见的功能,为了实现文件下载,Android提供了多种方式,包括使用HttpUrlConnection类和OkHttp库等。HttpUrlConnection类是Android系统中的一种基本的网络请求方式,通过该类可以...

    android httpconnection上传文件

    综上所述,Android中使用HttpURLConnection上传文件涉及到文件选择、网络连接、HTTP请求头设置、文件流的读写以及错误处理等多个环节。在实际开发中,需要根据具体需求和场景选择合适的方法进行实现。

    HttpURLConnection

    HttpURLConnection的demo,里面有网络请求get post 上传文件,下载文件,介绍HttpURLConnection这个类整体流程是怎样使用的,方便初学者学习

    Java利用HttpURLConnection发送post请求上传文件.docx

    以下是一个简化的示例代码片段,演示如何使用`HttpURLConnection`上传文件: ```java import java.io.*; import java.net.HttpURLConnection; import java.net.URL; public class FileUploader { public static ...

    Netroid框架和HttpURLConnection类的文件下载demo

    本文将深入探讨“Netroid框架”和“HttpURLConnection类”的使用,并通过一个文件下载的示例来阐述如何利用它们进行文件传输,同时关注性能指标如下载速度。 **Netroid框架** Netroid是一个轻量级的Android网络...

    Android上传单文件和多文件(后台使用MultipartFile)

    然后,我们需要使用HttpURLConnection或者OkHttp等网络库创建一个POST请求,将文件作为请求体发送。如果是多文件上传,需要将文件拆分成多个`Part`,每个`Part`包含一个`MultipartFile`。在Java后端,我们可以使用...

Global site tag (gtag.js) - Google Analytics