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

智能推荐

最新大猿人中控充值系统 免授权学习版 支持公众号H5、分销等功能_猿人充值系统 3.2 漏洞-程序员宅基地

文章浏览阅读1.5k次。简介:最新大猿人中控充值系统 免授权破解版 支持公众号H5、分销等功能功能简介:大猿人中控系统目前是市面上用的最多的电话费充值中控系统,支持代理分销、公众号H5、API接口对接等功能,也是目前最完善的一款中控系统,前端全开源,已破解免授权!配置环境:php7.3 + Redis搭建教程:1、首先吧大猿人中控系统压缩包上传到服务器内进行解压,然后吧数据库文件导入数据库内2、修改/application/database.php 文件进行配置链接数据库。_猿人充值系统 3.2 漏洞

创建异形窗口[3]-程序员宅基地

文章浏览阅读81次。为什么80%的码农都做不了架构师?>>> ..._gtk3 异形窗口

C语言:验证下列矩阵是否为魔方阵。魔方阵是每一行、每一列、主副对角线上的元素之和都是相等的矩阵。-程序员宅基地

文章浏览阅读2.6k次。#include <stdio.h>#include <string.h>#include <string.h>int main(void){ int a[5][5] = {17,24,1,8,15, 23,5,7,14,16, 4,6,13,20,22, 10,12,19,21,3, 11,18,25._验证下列矩阵是否为魔方阵。魔方阵是每一行、每一列、主副对角线上的元素之和都是

Django疫情返乡人员管理系统-11411,计算机毕业设计开题选题+程序定制+论文书写+答辩ppt书写-原创(题目+编号)的定制程序-程序员宅基地

文章浏览阅读51次。免费领取项目源码,请关注赞收藏并私信博主,谢谢-本课题研究的疫情返乡人员管理系统,主要功能模块包括:防疫须知、疫情用品、返乡报备、用户反馈管理等,主要是主要采取Mysql作为后台数据的主要存储单元,运用软件工程原理和开发方法,采用Python的Django技术构建的,实现了系统的全部功能。本次报告,首先分析了研究的背景、作用、意义,为研究工作的合理性打下了基础。

oracle序列中cache和nocache-程序员宅基地

文章浏览阅读1.1k次。首先我这篇博客的内容是我不知道oracle里的 cache 是什么,结果越查越多。。。“序列的cache通常为 20,但在需要依据序列值判断创建的先后顺序时必须是 NOCACHE”,关于这句话,是公司的数据库规范里提到的一句话,但是我感觉nocache会导致的问题好像还不少,所以我很纠结,但是除了根据序列值判断创建的先后顺序外,还有其他的靠谱的方式来判断先后顺序吗?难道入库时间不可以吗..._数据库中的nocache是什么意思

C语言那些事之字符串操作_c语言编辑多行源代码中的字符串-程序员宅基地

文章浏览阅读193次。一、字符串多行书写有时为了书写阅读方便,需要将一大串的字符串写成多行举例源码 MyUart_Printf("moduleConfigParams=>\r\n"\ "\tuartBaudrate:%s\r\n"\ "\tuartStopbit:%s\r\n"\ "\tparityType:%s\r\n"\ "\trfC..._c语言编辑多行源代码中的字符串

随便推点

Web性能优化:图片优化-程序员宅基地

文章浏览阅读71次。HTTP Archieve有个统计,图片内容已经占到了互联网内容总量的62%,也就是说超过一半的流量和时间都用来下载图片。从性能优化的角度看,图片也绝对是优化的热点和重点之一,Google PageSpeed或者Yahoo的14条性能优化规则无不把图片优化作为重要的优化手段,本文覆盖了Web图片优化的方方面面,从基本的图片格式选择、到尚未被广泛支持的响应式图片均有所提及。Google Web ..._jpegoptim optipng pngquant gifsicle

openGauss 向量化引擎-程序员宅基地

文章浏览阅读249次,点赞4次,收藏4次。openGauss提供向量化引擎,通常用在OLAP数据仓库类系统。主要是因为分析型系统通常是数据处理密集型,基本上都是采用顺序方式来访问表中大部分的数据,然后再进行计算,最后将计算结果输出给用户。

云锁linux宝塔安装,【最新版】宝塔面板下为Nginx自编译云锁Web防护模块教程-程序员宅基地

文章浏览阅读639次。相信很多站长在使用宝塔面板的同时也会安装云锁用于加固服务器安全性,不过有时因为Nginx版本过高等问题导致安装云锁时无法自动安装Web防护模块,所以还需要我们在Linux系统下额外将云锁Web防护模块编译进Nginx才可以。之前也转载过一篇一、上传云锁Web防护模块压缩包并解压Ps:其实宝塔添加模块功能里可以通过配置shell脚本实现这些前置准备,但我还是喜欢用手动的方式上传,这样使步骤看起来更直..._宝塔 云锁自编译 测试

Android 笔记:Error:A problem occurred configuring project ':app'.-程序员宅基地

文章浏览阅读8.4k次。原文作者:雪飘碧鸳 在github上导入项目,或其他地方导入Android Studio,出现Error:A problem occurred configuring project ‘:app’.的错误。其实这种错误有很多种原因,需要对每种情况进行不同的处理才行,这里说的一种情况是JNI的情况,即该项目使用到C/C++库,此时需要引入NDK才行,先看下错误提示Gradle ‘trunk’ ..._error:a problem occurred configuring project ':app'.

dataframe的groupby,agg,unstack应用_group by unstack-程序员宅基地

文章浏览阅读603次。groupby一个索引的比较简单,这里主要讲两个索引的:这里先设dataframe为下图然后根据第0列和第1列来进行分组,再对第二列进行数量统计,这里用了nunique函数来进行数量统计上图中最上面的2表示是根据原表的第3列即序号2的那一列使用的agg函数得到的结果。unstack是把一维表转换成二维表,即把(0,1)这对分组条件分别写成表的行列索引,一一对应agg函数得到的结果,如下图:stack是把二维表转换成一维表,类似花括号形式(就像是思维导图一层一层括出去),第一列写上原本的行索引_group by unstack

树莓派宝塔搭建NAS私有云盘nextcloud_宝塔做nas-程序员宅基地

文章浏览阅读2.2k次。宝塔新建网站:假设文件夹根目录为/home/nextcloud创建FTP,数据集。并且选择php版本。删除文件夹根目录/home/nextcloud下的两个html文件。下载nextcloud文件:官网链接可以使用wget:wget https://download.nextcloud.com/server/releases/nextcloud-20.0.0.zip,或者本地端下载后拖过去。多线程下载:sudo apt install axel axel -n 20 ht.._宝塔做nas

推荐文章

热门文章

相关标签