SpringBoot中实现文件的上传和下载

该博客详细介绍了如何使用Spring Boot实现文件上传和下载功能。前端通过POST请求上传文件,后台接收到文件后存储到指定路径并存入数据库。同时,提供了文件下载功能,通过GET请求获取文件,设置响应头以附件形式提供下载。此外,还提到了可以通过配置限制上传文件的大小。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文件上传

实现策略

​ 将文件上传到指定路径,并将文件的路径信息存储到数据库中

文件上传前台

   <form  th:action="@{/file/upload}" method="post" enctype="multipart/form-data">
                        文件上传:<input  class="layui-btn" type="file" name="file" />
                        <input type="submit" value="提交" />
                    </form>

界面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FwWFHtAW-1654847887100)(C:\Users\Leo\AppData\Roaming\Typora\typora-user-images\1654847488829.png)]

后台

    //文件上传
    @PostMapping("/file/upload")
    public String file(MultipartFile file) throws IOException {
        System.out.println(file.getOriginalFilename());//文件名
        System.out.println(file.getContentType());//文件类型
        System.out.println(file.getSize());//文件大小
        System.out.println(file.getInputStream());//文件的输入流

        //获得文件上传的路径
        String path = ResourceUtils.getURL("classpath:").getPath()+"/static/files";

        System.out.println(path);
        java.io.File newFile=new java.io.File(path);//由于自定义的实体类和java.io.File重名
        //文件夹不存在则重建
        if(!newFile.exists()){
            newFile.mkdirs();
        }
        //上传
        String fileName=file.getOriginalFilename();
        file.transferTo(new java.io.File(newFile,fileName));
        //将文件上传的url存入数据表中
        System.out.println("文件上传成功");
        Date date = new Date();
        Timestamp time = new Timestamp(date.getTime());//mysql中的日期格式
        File file1=new File(fileName,path,time);
        fileService.addFile(file1);//调用service方法 将文件信息插入数据库

        return "redirect:/file";
    }

可以在配置文件中对上传文件的大小等进行限制

文件下载

后台

 //文件的下载
    @GetMapping("/file/download/{fileId}")
    public String fileDownload(@PathVariable("fileId") int fileId, HttpServletResponse response) throws IOException {
        File file = fileService.queryFileById(fileId);
        // 获得待下载文件所在文件夹的绝对路径
        String realPath =file.getUrl();
        //获得输入流
        FileInputStream inputStream = new FileInputStream(new java.io.File(realPath, file.getFileName()));
        // 设置响应头、以附件形式打开文件
        response.setHeader("content-disposition", "attachment; fileName=" + file.getFileName());
        //获得输出流对象
        ServletOutputStream outputStream = response.getOutputStream();
        int len = 0;
        byte[] data = new byte[1024];
        while ((len = inputStream.read(data)) != -1) {
            outputStream.write(data, 0, len);
        }
        outputStream.close();
        inputStream.close();
        return "redirect:/file";
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值