java使用httpcomponents 上传文件

一、httpcomponents简介

  httpcomponents 是apache下的用来负责创建和维护一个工具集的低水平Java组件集中在HTTP和相关协议的工程。我们可以用它在代码中直接发送http请求,而无需用到页面的js去完成。该项目由一下几个部分组成:

  1、HttpComponents Core:

    HttpCore 是一套的低级别的 HTTP 传输组件可用于构建自定义客户端和服务器端 HTTP 服务与一个最小的足迹。HttpCore 支持两种模型: 阻止基于经典 Java I/O 和非阻塞 I/O 模型,事件驱动的 I/O 模型基于 Java NIO。阻塞 I/O 模型可能更适合于数据密集型、 低延迟的情况,而非阻塞模型可能更适合高延迟场景尤其是原始数据吞吐量不  有效地同时处理 成千上万的HTTP连接.而非阻塞模型可能更适合于高延迟情况下 有效地同时处理成千上万的并发HTTP连接的能力比处理原始数据吞吐量更重要的时候。

  2、HttpComponents Cilent

    HttpClient是一个HTTP/1.1并且兼容HTTP代理的一个实现,基于HttpCore。它为客户端验证,HTTP状态管理,HTTP连接管理,提供哦你一个可重复使用的组件。 HttpComponents Client是Commons HttpClient 3.x的一个替代者和继承者。

  3、HttpComponents AsyncCore

    HttpClient是一个HTTP/1.1并且兼容HTTP代理的一个实现,基于HttpCore NIO和HttpClient components。它是Apache HttpClient的一个辅助模块,在处理大量的并发连接的能力比原始数据吞吐量性能更重要的特殊情况下用到。

二、HttpClient post上传文件

  当我们上传一个文件的时候,一般都会有个key值对应这个文件。后台可以通过rquest,通过这个key值获取这个key对于的文件。传递参数也是一样。这里我们用到httpcomponents中的HttpClient组件,下载地址为:http://hc.apache.org/downloads.cgi . 使用到的jar包如下:

三、示例代码

 1 package com.demo.test;
 2
 3 import java.io.File;
 4 import java.io.IOException;
 5
 6 import org.apache.http.HttpEntity;
 7 import org.apache.http.client.ClientProtocolException;
 8 import org.apache.http.client.methods.CloseableHttpResponse;
 9 import org.apache.http.client.methods.HttpPost;
10 import org.apache.http.entity.mime.MultipartEntityBuilder;
11 import org.apache.http.entity.mime.content.FileBody;
12 import org.apache.http.impl.client.CloseableHttpClient;
13 import org.apache.http.impl.client.HttpClients;
14 import org.apache.http.util.EntityUtils;
15
16 public class Test {
17
18     public static String uploadFile(String uploadurl, File file) {
19         CloseableHttpClient client = HttpClients.createDefault();
20         HttpPost post = new HttpPost(uploadurl);
21         FileBody bin = new FileBody(file);// 文件
22
23         HttpEntity reqEntity = MultipartEntityBuilder.create()
24                 .addPart("media", bin).build();// 请求体. media为文件对于的key值
25         post.setEntity(reqEntity);
26         String responseContent = null; // 响应内容
27         CloseableHttpResponse response = null;
28         try {
29
30             response = client.execute(post);
31             if (response.getStatusLine().getStatusCode() == 200) {
32                 HttpEntity entity = response.getEntity();
33                 responseContent = EntityUtils.toString(entity, "UTF-8");
34             }
35         } catch (ClientProtocolException e) {
36             e.printStackTrace();
37         } catch (IOException e) {
38             e.printStackTrace();
39         } finally {
40             try {
41                 if (response != null)
42                     response.close();
43
44             } catch (IOException e) {
45                 e.printStackTrace();
46             } finally {
47                 try {
48                     if (client != null)
49                         client.close();
50                 } catch (IOException e) {
51                     e.printStackTrace();
52                 }
53             }
54         }
55         return responseContent;
56     }
57
58     public static void main(String[] args) {
59         String result = uploadFile("http://www.xxx.com/file/upload.action", new File(
60                 "c:/test.txt"));
61         System.out.println(result);
62     }
63
64 }

  后台打印信息,会显示文件上传的结果。 

java使用httpcomponents 上传文件

时间: 2024-11-29 07:12:59

java使用httpcomponents 上传文件的相关文章

关于云储存或者百度云的基础问题, 用java/android 实现上传文件到云储存(比如百度云)

============问题描述============ 关于云储存或者百度云的基础问题, 用java/android 实现上传文件到云储存(比如百度云) ============解决方案1============ 参考百度相关api

Java使用HttpURLConnection上传文件

从普通Web页面上传文件很简单,只需要在form标签叫上enctype="multipart/form-data"即可,剩余工作便都交给浏览器去完成数据收集并发送Http请求.但是如果没有页面的话要怎么上传文件呢? 由于脱离了浏览器的环境,我们就要自己去完成数据的收集并发送请求,所以就很麻烦了.首先我们来写个JSP页面并看看浏览器发出的Http请求是什么样的 JSP页面: <html> <head> <meta charset="UTF-8&qu

java使用ftp上传文件

ftpServer是apache MINA项目的一个子项目,它实现了一个ftp服务器,与vsftpd是同类产品.Filezilla是一个可视化的ftp服务器. ftp客户端也有很多,如Filezilla,FlashFXP,SmartFtp等,其中只有Filezilla是免费的. 今天使用Filezilla上传文件总是失败,一直显示 错误: 20 秒后无活动,连接超时 错误: 文件传输失败 用FlashFXP却可以很正常上传文件,但FlashFXP试用期只有30天,网上搜索注册码未果,遂想学学ja

Java Servlet 接收上传文件

在Java中使用 Servlet 来接收用户上传的文件,需要用到两个apache包,分别是 commons-fileupload 和 commons-io 包: 如果直接在doPost中,使用request.getInputStream()获取ServletInputStream,这样获取到的Stream是不能直接写入文件的,比如上传一个txt文件,你会发现保存下来的txt文件不只有原本txt文件本身的内容,里面还有post请求的一些参数,比如参数分割符等: 下面就是一个使用fileupload

java实用技能 上传文件 等等

1.IOS  AES对称加密,加密结果不同,问题解决 IOS http post请求,使用AFNetworing 框架,默认请求content-type为application/json ,所以无法使用@RequestParam或request.getParameter获取值 当把content-type改为applicaion/x-www-...  后,body中使用@RequestParam或request.getParameter仍然获取不到参数 加解密的结果,编码的结果,服务端有可能字母

JAVA代码实现上传文件至文件服务器(远程服务器、非项目当前所在服务器)

步骤一:添加依赖 <!--sftp文件上传--> <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.54</version> </dependency> 步骤二:编写工具类 package com.example.vue.vuedemo; import com.jcraft.js

java FileUpload 组件上传文件

Commons FileUpload Apache提供的一个组件,可以很方便的让我们处理客户端上传的文件, 下载地址 http://commons.apache.org/proper/commons-fileupload/ 下载commons-fileupload.jar,还有其依赖包 commons-io.jar一同下载好,导入工程 有点奇葩的是,在tomcat下已经把這个组建集成了,但是不能正常使用,其源码基本上是一样的. 正确的包名应该是這个:org.apache.commons.file

Java实现ftp上传文件、文件夹

1 import java.io.File; 2 import java.io.FileInputStream; 3 import org.apache.commons.net.ftp.FTPClient; 4 import org.apache.commons.net.ftp.FTPReply; 5 6 public class test { 7 8 private FTPClient ftp; 9 /** 10 * 11 * @param path 上传到ftp服务器哪个路径下 12 * @

java通过sftp上传文件

转载:http://blog.csdn.net/yhl_jxy/article/details/72633034 Linux操作系统我们经常使用ssh中的ftp,sftp连接服务器,做相应操作. 如何通过java代码的形式采用sftp连接到服务器,进行文件上传下载等操作呢? 第一步,引入依赖包 [html] view plain copy <!-- sftp上传依赖包 --> <dependency> <groupId>com.jcraft</groupId>