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

文件上传

实现策略

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

文件上传前台

   <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";
    }
  • 4
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot,可以使用Spring MVC的MultipartResolver来处理文件上传下载。下面是基本的实现步骤: 1. 添加依赖 在pom.xml文件添加以下依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version> </dependency> ``` 2. 配置MultipartResolver 在Spring Boot,可以通过@Configuration注解来配置MultipartResolver,具体如下: ``` @Configuration public class AppConfig { @Bean public CommonsMultipartResolver multipartResolver() { CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(); multipartResolver.setMaxUploadSize(1024*1024*10); // 设置上传文件的大小限制为10MB return multipartResolver; } } ``` 3. 实现文件上传 在Controller添加以下代码来处理文件上传请求: ``` @PostMapping("/upload") @ResponseBody public String handleFileUpload(@RequestParam("file") MultipartFile file) { if (!file.isEmpty()) { try { String fileName = file.getOriginalFilename(); byte[] bytes = file.getBytes(); // 保存文件到本地文件系统或者数据库等 return "上传成功!"; } catch (IOException e) { e.printStackTrace(); return "上传失败!"; } } else { return "上传失败,因为文件是空的。"; } } ``` 4. 实现文件下载 在Controller添加以下代码来处理文件下载请求: ``` @GetMapping("/download") public ResponseEntity<Resource> handleFileDownload() { // 从数据库或者本地文件系统等获取文件 Path path = Paths.get("path/to/file"); Resource resource = new FileSystemResource(path.toFile()); // 设置Content-Disposition响应头部,让浏览器下载文件而不是显示文件 HttpHeaders headers = new HttpHeaders(); headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + resource.getFilename() + "\""); return ResponseEntity.ok().headers(headers).body(resource); } ``` 以上就是Spring Boot实现文件上传下载功能的基本步骤。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值