文档章节

httpclient 上传文件、下载文件

J
 Java编程思想
发布于 2014/08/19 09:20
字数 399
阅读 9945
收藏 27

用httpclient4.3 post方式推送文件到服务端  
准备:httpclient-4.3.3.jar;httpcore-4.3.2.jar;httpmime-4.3.3.jar

标签: <无>

代码片段(1)[全屏查看所有代码]

1. [代码][Java]代码     


/**
 * 上传文件
 * @throws  ParseException
 * @throws  IOException
 */   
publicstaticvoidpostFile()throwsParseException, IOException{
    CloseableHttpClient httpClient = HttpClients.createDefault();
    try{
        // 要上传的文件的路径
        String filePath =newString("F:/pic/001.jpg");
        // 把一个普通参数和文件上传给下面这个地址 是一个servlet
        HttpPost httpPost =newHttpPost(
                "http://localhost:8080/xxx/xxx.action");
        // 把文件转换成流对象FileBody
        File file =newFile(filePath);
        FileBody bin =newFileBody(file); 
        StringBody uploadFileName =newStringBody(
                "把我修改成文件名称", ContentType.create(
                        "text/plain", Consts.UTF_8));
        //以浏览器兼容模式运行,防止文件名乱码。 
           HttpEntity reqEntity = MultipartEntityBuilder.create().setMode(HttpMultipartMode.BROWSER_COMPATIBLE)
                .addPart("uploadFile", bin)//uploadFile对应服务端类的同名属性<File类型>
                .addPart("uploadFileName", uploadFileName)//uploadFileName对应服务端类的同名属性<String类型>
                .setCharset(CharsetUtils.get("UTF-8")).build();
 
        httpPost.setEntity(reqEntity);
 
        System.out.println("发起请求的页面地址 "+ httpPost.getRequestLine());
        // 发起请求 并返回请求的响应
        CloseableHttpResponse response = httpClient.execute(httpPost);
        try{
            System.out.println("----------------------------------------");
            // 打印响应状态
            System.out.println(response.getStatusLine());
            // 获取响应对象
            HttpEntity resEntity = response.getEntity();
            if(resEntity !=null) {
                // 打印响应长度
                System.out.println("Response content length: "
                        + resEntity.getContentLength());
                // 打印响应内容
                System.out.println(EntityUtils.toString(resEntity,
                        Charset.forName("UTF-8")));
            }
            // 销毁
            EntityUtils.consume(resEntity);
        }finally{
            response.close();
        }
    }finally{
        httpClient.close();
    }
}
 
 /**
 * 下载文件
 * @param  url
 * @param  destFileName   xxx.jpg/xxx.png/xxx.txt
 * @throws  ClientProtocolException
 * @throws IOException
 */
publicstaticvoidgetFile(String url, String destFileName)
        throwsClientProtocolException, IOException {
    // 生成一个httpclient对象
    CloseableHttpClient httpclient = HttpClients.createDefault();
    HttpGet httpget =newHttpGet(url);
    HttpResponse response = httpclient.execute(httpget);
    HttpEntity entity = response.getEntity();
    InputStream in = entity.getContent();
    File file =newFile(destFileName);
    try{
        FileOutputStream fout =newFileOutputStream(file);
        intl = -1;
        byte[] tmp =newbyte[1024];
        while((l = in.read(tmp)) != -1) {
            fout.write(tmp,0, l);
            // 注意这里如果用OutputStream.write(buff)的话,图片会失真,大家可以试试
        }
        fout.flush();
        fout.close();
    }finally{
        // 关闭低层流。
        in.close();
    }
    httpclient.close();
}


本文转载自:http://www.oschina.net/code/snippet_216580_38020

J
粉丝 27
博文 165
码字总数 9761
作品 0
广州
程序员
私信 提问
一个c#的与web服务器交互的HttpClient类

.Net类库里提供了HttpWebRequest等类,方便我们编程与Web服务器进行交互. 但是实际使用中我们经常会遇到以下需求, 基础类里没有直接提供相应的功能 (WebClient类包含这些功能,只是用起来稍微麻...

鉴客
2011/12/16
3.1K
1
HttpClient, 使用C#操作Web

我们知道, .Net类库里提供了HttpWebRequest等类,方便我们编程与Web服务器进行交互. 但是实际使用中我们经常会遇到以下需求, 基础类里没有直接提供相应的功能 ( WebClient类包含这些功能,只是...

鉴客
2011/12/16
980
0
httpmime.jar 包是啥用的以及所依赖的包

httpclient通过POST来上传文件,而不是通过流的形式,并在服务端进行解析(通过httpmime.jar来操作) 这个文件是你将文件上传到服务器上的时候,所需要的文件,另外httpmine对httpclient等包有...

Oscarfff
2015/04/15
0
0
HttpAsyncClient 4.0 GA 发布

HttpAsyncClient 4.0 GA 发布了,HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 HttpCore NIO 和 HttpClient 组件。 HttpAsyncClient 的出现并不是为了替换 HttpClient,而是作为一...

oschina
2013/11/02
2.6K
4
【J2EE系列】HttpClient 学习整理 [转]

HttpClient 是我最近想研究的东西,以前想过的一些应用没能有很好的实现,发现这个开源项目之后就有点眉目了,令人头痛的cookie问题还是有办法解决滴。在网上整理了一些东西,写得很好,寄放...

磊神Ray
2012/01/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

2019年普通高校在川招生专业及名额介绍文科 带学费

2019年普通高校在川招生专业及名额介绍文科 带学费

asdtiang
15分钟前
1
0
springCloud配置中心config配置svn(踩坑记录)(基于consul)

新建一个config Server模块; 引入如下依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId></dependency>......

为何不可1995
15分钟前
0
0
mysql相关tips(持续更新)

1.字符集:utf8mb4 mysql 5.5.3之后出来的字符集,占用1-4个字节,最大占用的字节数为4.目前这个字段主要应用在(Emoji表情)。utf8mb4兼容utf8(1-3个字节),且比utf8能表示更多的字符。什...

lara_
15分钟前
0
0
微服务开源生态报告 No.1

从关注开源,到使用开源,再到参与开源贡献,越来越多的国内开发者通过开源技术来构建业务。 截止目前,Arthas / Dubbo / ChaosBalde / Nacos / RocketMQ / Seata / Sentinel / Spring Clou...

阿里云官方博客
18分钟前
1
0
MaxCompute 费用暴涨之存储压缩率降低导致SQL输入量变大

现象:同样的SQL,每天处理的数据行数差不多,但是费用突然暴涨甚至会翻数倍。 分析: 我们先明确MaxCompute SQL后付费的计费公式:一条SQL执行的费用=扫描输入量 ️ SQL复杂度 ️ 0.3(¥/GB...

zhaowei121
20分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部