Java使用HttpClient实现文件下载


Posted in Java/Android onAugust 14, 2022

使用HttpClient实现文件下载,供大家参考,具体内容如下

服务端:

1、服务端是一个SpringBoot服务,写了一个接口用于客户端请求文件,客户端携带参数(文件名fileName)使用Get方式请求;

2、服务端获取到文件名后将与本地仓库地址E:/downloadRepository/组成绝对路径,获取文件转换成流,最后利用OutputStream对象将缓冲区的数据送到客户端;

3、缓冲区大小也可设置为一个定值(如:1024*1024),然后再循环写入输出流对象;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;

@RestController
public class RequestController {
    @RequestMapping(path = "/download", method = RequestMethod.GET)
    public void downLoad(HttpServletResponse response, String fileName){
        File file = new File("E:/downloadRepository/" + fileName);
        try{
            InputStream inputStream = new BufferedInputStream (new FileInputStream(file));
            //创建缓冲区
            byte[] buffer = new byte[inputStream.available()];
            inputStream.read(buffer);
            inputStream.close();
            OutputStream outputStream = new BufferedOutputStream(response
                    .getOutputStream());
            outputStream.write(buffer);
            outputStream.flush();
            outputStream.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

原文件:

1、原文件所在地址;

Java使用HttpClient实现文件下载

2、原文件内容;

Java使用HttpClient实现文件下载

客户端:

1、请求参数为一个文件的文件名,这里我们通过URIBuilder对象的addParameter()方法来进行设置请求参数;

2、在状态码等于200时,将请求来的文件利用FileUtils工具类将字符串转换成文件,并且该方法可以设置保存路径;

import org.apache.commons.io.FileUtils;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.*;

public class RequestFileService {

    public void httpRequest(String fileName) {
            // 请求地址
            String url = "http://localhost:8080/download";
            // 下载文件保存路径
            String savePath = "E:/demo/" + fileName;
            CloseableHttpClient httpclient = HttpClients.createDefault();
            CloseableHttpResponse response = null;
            try {
                // 使用URIBuilder对象用于设置请求参数
                URIBuilder urlBuilder = new URIBuilder(url);
                urlBuilder.addParameter("fileName", fileName);
                HttpGet httpGet = new HttpGet(urlBuilder.build());
                // 执行请求
                response = httpclient.execute(httpGet);
                if (response.getStatusLine().getStatusCode() == 200) {
                    String content = EntityUtils.toString(response.getEntity(), "UTF-8");
                    // 将请求内容转换成文件并保存
                    FileUtils.writeStringToFile(new File(savePath), content, "UTF-8");
                }
            } catch (Exception e) {
                e.getStackTrace();
            }finally {
                try {
                    response.close();
                    httpclient.close();
                }catch (IOException e){
                    e.getStackTrace();
                }
            }
    }

    public static void main(String[] args) {
        RequestFileService requestFileService = new RequestFileService();
        //参数为请求文件名
        requestFileService.httpRequest("205老面馆.txt");
    }
}

下载结果:

1、按照代码所设定的路径,应该存在E:/demo/目录下;

Java使用HttpClient实现文件下载

2、检查文件完整性,没啥问题:)

Java使用HttpClient实现文件下载

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Java/Android 相关文章推荐
JPA如何使用entityManager执行SQL并指定返回类型
Jun 15 Java/Android
Java elasticsearch安装以及部署教程
Jun 28 Java/Android
Java Socket实现多人聊天系统
Jul 15 Java/Android
SpringBoot SpringEL表达式的使用
Jul 25 Java/Android
使用logback实现按自己的需求打印日志到自定义的文件里
Aug 30 Java/Android
Java 在线考试云平台的实现
Nov 23 Java/Android
Java使用JMeter进行高并发测试
Nov 23 Java/Android
InterProcessMutex实现zookeeper分布式锁原理
Mar 21 Java/Android
详解Android中的TimePickerView(时间选择器)的用法
Apr 30 Java/Android
Android Studio实现带三角函数对数运算功能的高级计算器
May 20 Java/Android
SpringBoot详解整合Redis缓存方法
Jul 15 Java/Android
Android实现获取短信验证码并自动填充
May 21 Java/Android
HttpClient实现表单提交上传文件
Aug 14 #Java/Android
HttpClient实现文件上传功能
Aug 14 #Java/Android
SpringBoot Http远程调用的方法
Aug 14 #Java/Android
基于Android10渲染Surface的创建过程
Aug 14 #Java/Android
OpenFeign实现远程调用
Aug 14 #Java/Android
httpclient调用远程接口的方法
Aug 14 #Java/Android
Java Spring读取和存储详细操作
Aug 05 #Java/Android
You might like
一篇入门的php Class 文章
2007/04/04 PHP
浅析php学习的路线图
2013/07/10 PHP
PHP语法小结之基础和变量
2015/11/22 PHP
PHP Yaf框架的简单安装使用教程(推荐)
2016/06/08 PHP
php读取XML的常见方法实例总结
2017/04/25 PHP
PHP设计模式之装饰器模式定义与用法详解
2018/04/02 PHP
PHP的PDO连接讲解
2019/01/24 PHP
JavaScript Undefined,Null类型和NaN值区别
2008/10/22 Javascript
javascript时间函数基础介绍
2013/03/28 Javascript
js判断鼠标同时离开两个div的思路及代码
2013/05/31 Javascript
JavaScript闭包实例讲解
2014/04/22 Javascript
JavaSript中变量的作用域闭包的深入理解
2014/05/12 Javascript
javascript制作网页图片上实现下雨效果
2015/02/26 Javascript
浅谈jquery中delegate()与live()
2015/06/22 Javascript
jQuery实现分章节锚点“回到顶部”动画特效代码
2015/10/23 Javascript
jquery.cookie.js实现用户登录保存密码功能的方法
2016/04/15 Javascript
JavaScript学习笔记整理_关于表达式和语句
2016/09/19 Javascript
纯js仿淘宝京东商品放大镜功能
2017/03/02 Javascript
Angular中innerHTML标签的样式不起作用的原因解析
2019/06/18 Javascript
详细分析Node.js 模块系统
2020/06/28 Javascript
[01:27]DOTA2电竞之夜 今夜共饮庆功酒
2014/08/02 DOTA
[01:00]选手抵达华西村 整装待发备战2016国际邀请赛中国区预选赛
2016/06/25 DOTA
python 递归深度优先搜索与广度优先搜索算法模拟实现
2018/10/22 Python
Django设置Postgresql的操作
2020/05/14 Python
Banana Republic英国官网:香蕉共和国,GAP集团旗下偏贵族风
2018/04/24 全球购物
英国婴儿及儿童产品商店:TigerParrot
2019/03/04 全球购物
澳大利亚领先的女性运动服品牌:Lorna Jane
2020/06/19 全球购物
意大利顶级奢侈品电商:LUISAVIAROMA(支持中文)
2020/05/26 全球购物
数据库测试通常都包括哪些方面
2015/11/30 面试题
计算机网络工程专业职业生涯规划书
2014/03/10 职场文书
幼儿园托班开学寄语(2015秋季)
2015/05/27 职场文书
监护人证明
2015/06/19 职场文书
MySQL获取所有分类的前N条记录
2021/05/07 MySQL
聊聊pytorch测试的时候为何要加上model.eval()
2021/05/23 Python
Vue操作Storage本地化存储
2022/04/29 Vue.js
Oracle锁表解决方法的详细记录
2022/06/05 Oracle