【Java后端实现文件下载】这个方法做了个简单的测试,接收的`str`就是我上传的文件目录地址,因为之前的上传保存文件会返回一个文件目录地址,所以可以根据这个值去获取对应的文件。 在实际的开发中,文件

前言

java实现对文件的下载功能能,在之前的前端下载,后端你接收文件两篇文章的基础上再来一个文件下载,配合起来就完整了。


点击可查看前面内容:
vue前端文件下载
java后端接收保存多文件

后端文件下载

这个方法做了个简单的测试,接收的str就是我上传的文件目录地址,因为之前的上传保存文件会返回一个文件目录地址,所以可以根据这个值去获取对应的文件。
在实际的开发中,文件服务器接口返回的应该是一个标准的链接地址。

// str:文件目录地址
public void testDown(HttpServletResponse response, String str)  throws Exception {
		// 这个判断主要是防止为null,放这里是因为我原本的操作由分割字符串的操作,所以做了判断,
		// 如果需要使用,这个可以改,不重要,关注下面的下载方法体
        if (str.length()>1){
            File file = new File(str);
            // 判断当前文件是否存在
            if (!file.exists()){
                throw new BusinessException("当前附件" + str + "不存在!");
            }
            String fileName = file.getName();
            fileName = URLEncoder.encode(fileName, "UTF-8");
            response.setContentType("multipart/form-data;charset=utf-8");
            // 设置头部参数对应前面的文章,前端下载文件方法
            // 从 headers中拿到 fileName
            response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".pdf");
            response.setHeader("filename", fileName + ".pdf");
            //设置类型
            response.setContentType("application/x-msdownload");
            //设置编码
            response.setCharacterEncoding("utf-8");
            // 读取下载的文件
            FileInputStream bis;
            OutputStream os;
            bis = new FileInputStream(file);
            // 相应文件返回到 response中
            os = response.getOutputStream();
            //创建一个byte对象
            byte[] buff = new byte[1024];
            int i=0;
            while ((i = bis.read(buff)) != -1) {
                os.write(buff, 0, i);
            }
            bis.close();
            os.close();
        }
    }

二、总结

下载文件:
从指定目录下获取文件:bis = new FileInputStream(file);
相应到respinse中返回:os = response.getOutputStream();

保存文件:
获取指定文件的输入流:
inputStream = file.getInputStream();

将读取到的文件输出到指定目录文件:
os = new FileOutputStream(tempFile.getPath()+ “/” + File.separator + fileName);

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值