小言_互联网的博客

springBoot 上传与下载案例

321人阅读  评论(0)

(一)文件的上传
一,编写上传文件表单upoad.html

1,创建一个用于来上传文件upload.html

<!DOCTYPE html>
<html lang="en" xmlns:th="www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>文件上传</title>
</head>

<!--
    上传 的 三大要素
            1,提交方式 POST
               2,提交类型  multipart/form-data
                   3,组件的类型得是 file :type=file
-->
<body>
<form th:action="@{/uploadFile}" method="post" enctype="multipart/form-data">
    <input type="file" name="uploadFiles"><br />
    <input type="submit" name="上传">
</form>

</body>
</html>

2,在application.properties全局配置文件中添加文件上传的相关配置

# thymeleaf 相关配置
spring.thymeleaf.cache=false
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.mode=HTML
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html


spring.servlet.multipart.max-file-size=1MB
spring.servlet.multipart.max-request-size=10MB

3,在FileController类,进行文件上传处理,实现文件上传功能

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
//  文件的控制器
//  上传操作

@Controller
public class FileController {


//    1,浏览器打开访问如下的URI路径  即可到达  上传的要页面
    @GetMapping("/toUploadPage")
    public String toUploadPage(){
        return "/upload";
    }

//    2,上传网页  将内容进行上传了  本方法
    @PostMapping("/uploadFile")
    public String uploadFile(MultipartFile[] uploadFiles) throws IOException {
//        System.out.println("files:"+uploadFiles.length);
        for (MultipartFile file : uploadFiles){
//            获取上传文件名称 (文件名+ 扩展名)
            String filename = file.getOriginalFilename();
//            System.out.println("文件的名称是"+filename);
            String dir = "D:/file/";
            File f = new File(dir);
//            判断 文件是否存在? 加了一个感叹号 表示去反 | 假设为不存在该文件夹
            if (!f.exists()){
                f.mkdirs(); // mk是 make 的缩写 翻译为 制作 创造
            }
            file.transferTo(new File(dir + filename));
        }
        return "/upload";
    }
}

4,运行DemoApplication.java


5,在网页中打开http://localhost:8080/toUploadPage
选择文件打开 提交

点击提交

上传成功到D:/file 文件中了

(二)文件的下载

1,编写上传文件表单download.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>文件下载</title>
</head>
<body>
        <table border="1px">
            <tr>文件下载列表</tr>
            <tr>
                <td>
                    <img src="../static/2.png"  width="160px" height="200px">
                    <a th:href="@{/download(name='2.png')}">点我下载</a>
                </td>
                <td>
                    <img src="../static/3.jpg"  width="160px" height="200px">
                    <a th:href="@{/download(name='3.jpg')}">点我下载</a>
                </td>
                <td>
                    <img src="../static/13224.png" width="160px" height="200px">
                    <a th:href="@{/download(name='13224.png')}">点我下载</a>
                </td>
            </tr>
        </table>
</body>
</html>

2,在FileController类,进行文件下载处理,实现文件下载功能

package com.example.demo.controller;

import org.apache.commons.io.FileUtils;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;

import java.io.File;
import java.io.IOException;
//  文件的控制器
//  上传操作

@Controller
public class FileController {


//    1,浏览器打开访问如下的URI路径  即可到达  上传的要页面
    @GetMapping("/toUploadPage")
    public String toUploadPage(){
        return "/upload";
    }

//    2,上传网页  将内容进行上传了  本方法
    @PostMapping("/uploadFile")
    public String uploadFile(MultipartFile[] uploadFiles, Model model){
      System.out.println("files:"+uploadFiles.length);
      model.addAttribute("statues","上传成功");
        for (MultipartFile file : uploadFiles){
//            获取上传文件名称 (文件名+ 扩展名)
            String filename = file.getOriginalFilename();
           System.out.println("文件的名称是"+filename);
            String dir = "D:/file/";
            File f = new File(dir);
//            判断 文件是否存在? 加了一个感叹号 表示去反 | 假设为不存在该文件夹
            if (!f.exists()){
                f.mkdirs(); // mk是 make 的缩写 翻译为 制作 创造
            }
            File uploadfile = new File(dir + filename);
            System.out.println(uploadfile.getPath());
            System.out.println(uploadfile.getName());
            try {
                file.transferTo(uploadfile);
            } catch (IOException e) {
                model.addAttribute("statues","上传成功");
                throw new RuntimeException("失败"+e);

            }
        }
        return "/upload";
    }
    @GetMapping("toDownloadPage")
    public  String download(){
        return "download";
    }

//    文件的下载
    //    文件的下载
         //    文件的下载

    @GetMapping("download")
    public ResponseEntity download(HttpServletResponse response, String name) {
        String dir = "D:/file/";
        File file = new File(dir + File.separator);//D:/file/2.jpg
        HttpHeaders httpHeaders = new HttpHeaders();
//        httpHeaders.setContentDispositionFormData("attachment",name);
        response.setHeader("Content-Disposition","attachment; filename="+name);
//    设置文件内容类型
    httpHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);// MediaType  媒体的类型

        try {
            return new ResponseEntity(FileUtils.readFileToByteArray(file), HttpStatus.OK);
        } catch (IOException e) {
            e.printStackTrace();
            return new ResponseEntity(e.getMessage(), HttpStatus.OK);
        }

    }


}

3,运行

4,


转载:https://blog.csdn.net/qq_44847402/article/details/106120009
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场