`
kingj
  • 浏览: 425691 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

使用HttpURLConnection上传文件

 
阅读更多

在页面里实现上传文件不是什么难事,写个form,加上enctype = "multipart/form-data",在写个接收的就可以了,没什么难的,如果要用java.net.HttpURLConnection来实现文件上传,还真有点搞头.:-)

  1.先写个servlet把接收到的 HTTP 信息保存在一个文件中, 看一下 form 表单到底封装了什么样的信息。

  Java代码

  public void doPost(HttpServletRequest request, HttpServletResponse response)

  throws ServletException, IOException {

  //获取输入流,是HTTP协议中的实体内容

  ServletInputStream? in=request.getInputStream();

  //缓冲区

  byte buffer[]=new byte[1024];

  FileOutputStream out=new FileOutputStream("d:\\test.log");

  int len=sis.read(buffer, 0, 1024);

  //把流里的信息循环读入到file.log文件中

  while( len!=-1 ){

  out.write(buffer, 0, len);

  len=in.readLine(buffer, 0, 1024);

  }

  out.close();

  in.close();

  }

  来一个form表单。

  <form name="upform" action="upload.do" method="POST"

  enctype="multipart/form-data">

  参数<input type="text" name="username"/><br/>

  文件1<input type="file" name="file1"/><br/>

  文件2<input type="file" name="file2"/><br/>

  <input type="submit" value="Submit" />

  <br />

  </form>

  假如我参数写的内容是hello word,然后二个文件是二个简单的txt文件,上传后test.log里如下

  Java代码

  -----------------------------7da2e536604c8

  Content-Disposition: form-data; name="username"

  hello word

  -----------------------------7da2e536604c8

  Content-Disposition: form-data; name="file1"; filename="D:\haha.txt"

  Content-Type: text/plain

  haha

  hahaha

  -----------------------------7da2e536604c8

  Content-Disposition: form-data; name="file2"; filename="D:\huhu.txt"

  Content-Type: text/plain

  messi

  huhu

  -----------------------------7da2e536604c8--

  研究下规律发现有如下几点特征

  1.第一行是“ -----------------------------7d92221b604bc ”作为分隔符,然后是“ \r\n ” 回车换行符。 这个7d92221b604bc 分隔符浏览器是随机生成的。

  2.第二行是Content-Disposition: form-data; name="file2"; filename="D:\huhu.txt";name=对应input的name值,filename对应要上传的文件名(包括路径在内),

  3.第三行如果是文件就有Content-Type: text/plain;这里上传的是txt文件所以是text/plain,如果上穿的是jpg图片的话就是image/jpg了,可以自己试试看看。

  然后就是回车换行符。

  4.在下就是文件或参数的内容或值了。如:hello word。

  5.最后一行是-----------------------------7da2e536604c8--,注意最后多了二个--;

  有了这些就可以使用HttpURLConnection来实现上传文件功能了

  Java代码 public void upload(){

  List<String> list? = new ArrayList<String>();? //要上传的文件名,如:d:\haha.doc.你要实现自己的业务。我这里就是一个空list.

  try {

  String BOUNDARY = "---------7d4a6d158c9"; // 定义数据分隔线

  URL url = new URL("http://localhost/JobPro/upload.do");

  HttpURLConnection conn = (HttpURLConnection) url.openConnection();

  // 发送POST请求必须设置如下两行

  conn.setDoOutput(true);

  conn.setDoInput(true);

  conn.setUseCaches(false);

  conn.setRequestMethod("POST");

  conn.setRequestProperty("connection", "Keep-Alive");

  conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");

  conn.setRequestProperty("Charsert", "UTF-8");

  conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);

  OutputStream out = new DataOutputStream(conn.getOutputStream());

  byte[] end_data = ("\r\n--" + BOUNDARY + "--\r\n").getBytes();// 定义最后数据分隔线

  int leng = list.size();

  for(int i=0;i<leng;i++){

  String fname = list.get(i);

  File file = new File(fname);

  StringBuilder sb = new StringBuilder();

  sb.append("--");

  sb.append(BOUNDARY);

  sb.append("\r\n");

  sb.append("Content-Disposition: form-data;name=\"file"+i+"\";filename=\""+ file.getName() + "\"\r\n");

  sb.append("Content-Type:application/octet-stream\r\n\r\n");

  byte[] data = sb.toString().getBytes();

  out.write(data);

  DataInputStream in = new DataInputStream(new FileInputStream(file));

  int bytes = 0;

  byte[] bufferOut = new byte[1024];

  while ((bytes = in.read(bufferOut)) != -1) {

  out.write(bufferOut, 0, bytes);

  }

  out.write("\r\n".getBytes()); //多个文件时,二个文件之间加入这个

  in.close();

  }

  out.write(end_data);

  out.flush();

  out.close();

  // 定义BufferedReader输入流来读取URL的响应

  BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));

  String line = null;

  while ((line = reader.readLine()) != null) {

  System.out.println(line);

  }

  } catch (Exception e) {

  System.out.println("发送POST请求出现异常!" + e);

  e.printStackTrace();

  }

  }

分享到:
评论

相关推荐

    使用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