SpringBootd的文件下载

SpringBoot的文件下载
关于文件上传和下载,其实都挺简单的。pom文件主要的如下。(这里这个fileupload可以不下,可以自己选择写其他的方法下载,不一定参考我的,我的是Spring MVC通过阿帕奇Commons FileUpload技术实现的一个实现类,所以才需要依赖这个组件)

    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.3.3</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>

我这里写的下载是先从自己的存储下载文件里查出有多少文件并且显示在前端页面。
下载文件点此处
控制层代码: //下载页面展示
@RequestMapping("/showDownLoad")
public String showDownLoad(HttpServletRequest request, Model model){
String path = “E:\Web\UploadDownLoad”;
//request.getServletContext().getRealPath("/upload333");
File fileDir = new File(path);
File filesList[] = fileDir.listFiles();
System.out.println(path);
model.addAttribute(“filesList”,filesList);
model.addAttribute(“hanhan”,“123456”);
return “downLoad”;

}
//下载
@GetMapping("/downLoad")
public ResponseEntity<byte[]> downloadFile(HttpServletRequest request,
                                           @RequestParam("filename") String filename)throws IOException {
                                           //@RequestHeader("User - Agent") String userAgent

            String path = "E:\\Web\\UploadDownLoad";
                    //request.getServletContext().getRealPath("/upload333");
            File downFile = new File(path + File.separator + filename);
            ResponseEntity.BodyBuilder builder = ResponseEntity.ok();
            builder.contentLength(downFile.length());
            builder.contentType(MediaType.APPLICATION_OCTET_STREAM);
            filename = URLEncoder.encode(filename,"UTF-8");

// !!!! 本来是想使用UA进行使用浏览器区别对待的,一直报错,400,我暂时也不知道前端怎么传,那就暂且把这个问题放一边叭
// if(userAgent.indexOf(“MSIE”)>0){
// builder.header(“Content-Disposition”,“attachment;filename=”+filename);
//
// }else{
// builder.header(“Content-Disposition”,“attachment;filename*=UTF-8’’”+filename);
// }
return builder.body(FileUtils.readFileToByteArray(downFile));
}
前端html代码如下:这里是接收控制层的参数并以视图显示出来。




                        <span th:text="${fileStat.count}"></span>
                   </td>
                   <td>
                        <a th:href="@{downLoad(filename = ${file.name})}">
                            <span th:text="${file.name}"></span>
                        </a>
                   </td>
               </tr>
        </tbody>
    </table>

</div>
然后效果如下,点击链接即可下载至本地。
![在这里插入图片描述](https://img-blog.csdnimg.cn/e95ab41404404e3f86f5fd9f0305e049.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAcXFfNDI3MzgzODc=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值