java文件下载通过response流实现文件存储在客户端指定路径

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();
        }
    

 

 

 

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值