【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
    评论
Java后端实现文件下载可以通过以下步骤实现: 1. 获取文件的输入流和文件名 ``` File file = new File(filePath); String fileName = file.getName(); InputStream inputStream = new FileInputStream(file); ``` 2. 设置响应头信息 ``` response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("utf-8"), "ISO8859-1")); ``` 3. 将输入流写入输出流 ``` OutputStream outputStream = response.getOutputStream(); byte[] buffer = new byte[1024]; int len; while ((len = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, len); } outputStream.flush(); ``` 完整代码如下: ```java @RequestMapping("/download") public void download(HttpServletResponse response) throws UnsupportedEncodingException, FileNotFoundException { String filePath = "文件路径"; File file = new File(filePath); String fileName = file.getName(); InputStream inputStream = new FileInputStream(file); response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("utf-8"), "ISO8859-1")); OutputStream outputStream = response.getOutputStream(); byte[] buffer = new byte[1024]; int len; while ((len = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, len); } outputStream.flush(); outputStream.close(); inputStream.close(); } ``` 其,`@RequestMapping("/download")`是接口的访问路径,可以根据实际需求进行修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值