java文件下载通过response流实现文件存储在客户端指定路径_通过response下载文件并指定目标地址-程序员宅基地

技术标签: 功能代码  java  io  文件下载  http  

1、我们发送请求到服务器端通过response输出流将文件进行读取存储到客户端

一般情况下我们是弹出窗口让用户选择存储路径,如何实现默认存储到指定路径呢?

代码如下:

2、客户端发送请求:

2.1、获取文件名,获取指定文件名的response流

2.2、将response输出流包装到制定了文件下载路径的OutPut流中写到本地的设置路径下outputUrl

rpcServerUrl是服务器端的路径

    @RequestMapping(value = "/receiveFilename", method = { RequestMethod.POST})
    public Boolean receiveFilename(String filename) {
        Boolean flag = false;
        try {
            //创建httpClient对象
            HttpClient httpClient = new HttpClient();
            //创建getMethod对象
            GetMethod getMethod = new GetMethod(rpcServerUrl);
            //封装参数
            getMethod.setRequestHeader("fileName", URLEncoder.encode(filename,"UTF-8"));
            //发送请求
            httpClient.executeMethod(getMethod);
            //创建接收文件的流
            File file = new File(outputUrl++File.separator+filename);
            OutputStream outputStream = new FileOutputStream(file);
            //将responseBody截取并写入到指定文件路径下
            outputStream.write(getMethod.getResponseBody());
            outputStream.flush();
            outputStream.close();
            flag = true;
        } catch (Exception e) {
            e.printStackTrace();
            flag = false;
        }
        return flag;
    }


3、服务器端接收请求代码

读取服务器端文件,将服务器端文件写入到response的输出流中

    @RequestMapping(value = "/sendUploadVoice")
    public void sendUploadVoice(HttpServletResponse response,HttpServletRequest request) {
        try {
                //接收请求
                request.setCharacterEncoding("utf-8");
                response.setCharacterEncoding("utf-8");
                response.setContentType("application/octet-stream");
                //获取文件
                String fileName = request.getHeader("fileName");
                fileName= URLDecoder.decode(fileName,"UTF-8");
                //获取文件输入流  localFileDir是服务端存储文件的路径
                File file = new File(localFileDir+ File.separator + fileName);
                response.setContentLength((int)file.length());
                response.setHeader("Accept-Ranges", "bytes");
                InputStream in = new BufferedInputStream(new FileInputStream(file), 4096);
                OutputStream os = new BufferedOutputStream(response.getOutputStream());

                byte[] bytes = new byte[4096];
                int i = 0;
                while ((i = in.read(bytes)) > 0) {
                    os.write(bytes, 0, i);
                }
                os.flush();
                os.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    

 

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lpp_dd/article/details/78042875

智能推荐

路由器端口介绍-程序员宅基地

文章浏览阅读1.5w次,点赞14次,收藏61次。路由器所在的网络位置比较复杂,既可是内部子网边缘,也可位于内、外部网络边缘。同时为了实现强大的适用性,它需要连接各种网络,这样,它的接口也就必须多种多样。对于这些,不要说一般的网络爱好者,就连许多网管人员都无法说清楚。这里向大家全面介绍路由器的各种接口及连接方法。一、路由器接口 路由器具有非常强大的网络连接和路由功能,它可以与各种各样的不同网络进行物理连接,这就决定了路由器的接口技术非常复杂,越是高档的路由器其接口种类也就越多,因为它所能连接的网络类型越多。路由器的端口主要分局域网端口、广域网端口..._路由器端口

使用ps制作食物网页_ps美食网页制作步骤-程序员宅基地

文章浏览阅读762次。使用Ps制作食物网页(作者:李文成,撰写时间:2019年4月7日)软件:Adobe Photoshop CC 2018(PS),首先打开Ps新建一个图层,使用矩形工具(U)拉出一个矩形,颜色为:#d6caca,再使用横排文字工具(T)将文字打上去,文字大小为:13,颜色为:#333333,注意字体间距要一样,字体大小也要一样,旁边购物袋是使用椭圆工具(U)跟矩形工具制作成的,利用图层的叠放制..._ps美食网页制作步骤

使用Python将TXT转为Excel_python txt转excel-程序员宅基地

文章浏览阅读7.7k次,点赞5次,收藏37次。使用Python将txt转为excel_python txt转excel

Android最佳架构:MVI + LiveData + ViewModel | ProAndroidDev_android 视图 viewmodel 还原 viewstate-程序员宅基地

文章浏览阅读1.7k次。MVVM和MVI架构模式合并为一个最好的架构,为任何Android项目提供了完美的架构。有太多可用的体系结构模式,每种模式都有其优缺点。所有这些模式都试图实现相同的架构基本原理:1、关注点分离(SoC) :这是一种设计原则,用于将计算机程序分为不同的部分,以便每个部分都可以解决一个单独的关注点。关注点是提供问题解决方案时重要的事情。该原则与面向对象编程的“ 单一责任原则”密切相关,后者 指出..._android 视图 viewmodel 还原 viewstate

OS中关于父子进程的执行顺序和多个子进程之间的执行顺序(整理)_fork父子进程谁先运行-程序员宅基地

文章浏览阅读8.2k次,点赞7次,收藏28次。一、问:1.fork出一个子进程,父子进程执行的先后顺序是不确定的,如果先执行父进程,再执行子进程,父进程中没有wait和sleep。问,是否先把父进程执行完,再执行子进程?还是两个进程是一块执行的?2.如果父进程中有sleep,父进程中的程序执行到sleep进行休眠,转而执行子进程。问:子进程中的程序执行完了再返回父进程中执行,还是休眠时间到了返回父进程中执行,还是其他?答:进程的..._fork父子进程谁先运行

随便推点

组装一台计算机需要哪些硬件(写出配置),电脑组装知识网组装电脑配置单中都有哪些配置组装电脑需要的电脑硬件...-程序员宅基地

文章浏览阅读9.7k次。本文转自:http://www.dn010.com/zhuangji/651.html比起直接购买装好的品牌电脑,很多人更喜欢自己买配置来组装一台电脑。组装电脑可以完全按照自己的喜好,组装出最适合自己的电脑。而且组装电脑的价格也相对来说比较划算,是一种很实用的方法。那么组装电脑需要购买一些什么样子的东西呢?今天,就来带大家总结一下组装电脑需要的配置单吧。1、电脑硬件:组装电脑最先要购买的就是电脑的..._电脑硬件怎么搭配

mh采样算法推导_深度学习:Gibbs 采样-程序员宅基地

文章浏览阅读1.9k次。1. 什么是Gibbs采样Gibbs采样是MH算法的一种特例(α==1),因此可以保证Gibbs抽取的样本,也构成一个非周期不可约稳定收敛的马氏链;Gibbs采样适用于样本是两维或以上的情况;通过积分去除掉相关但是不感兴趣的变量,称为“collapsed”的Gibbs采样;并且个人的一个感觉是,观测量所直接依赖的那些变量是不能被积分掉的,否则无法有效的进行抽样…gibbs采样需要知道样本中一个属性..._mh抽样

Java+JSP+Mysql+Tomcat实现Web图书管理系统-程序员宅基地

文章浏览阅读7.8w次,点赞221次,收藏1.5k次。图书管理系统一、系统介绍1.软件环境2.功能模块图2.系统功能3.数据库表4.工程截图二、系统展示1.系统注册2.系统登录3.找回密码4.管理员-主页5.管理员-用户管理主页6.管理员-新增用户7.管理员-修改用户8.管理员-借阅信息管理9.管理员-图书管理主页10.管理员-新增图书11.管理员-修改图书12.用户-主页13.用户-图书明细查看14.用户-新增留言15.用户-借阅信息管理16.用户-书架管理三、代码实现BookUserRecordCommentBookShelfBookDaoBookShel_图书管理系统

lib文件夹的作用和配置lib文件-程序员宅基地

文章浏览阅读2.8k次,点赞2次,收藏7次。lib文件夹的作用和配置lib文件_lib文件

GJB 438C-2021军用软件开发文档通用要求_gjb438c电子版下载-程序员宅基地

文章浏览阅读7.2k次,点赞30次,收藏4次。【lfsc】_gjb438c电子版下载

MySQL | JDBC连接数据库详细教程【全程干货】_mysql jdbc-程序员宅基地

文章浏览阅读1w次,点赞93次,收藏187次。如何使用JDBC连接MySQL数据库详细教程_mysql jdbc