SpringBoot 文件上传下载

文件上传

配置

# 文件上传校验
# 开启上传和下载
spring.servlet.multipart.enabled=true
# 最大的文件大小
spring.servlet.multipart.max-file-size=50KB
# 单次最大请求大小
spring.servlet.multipart.max-request-size=50KB

单个(批量)上传

@RestController
public class FileUploadController {
   
	// 用于根据时间区分目录
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");

    @PostMapping("/upload")
    public String upload(MultipartFile uploadFile, HttpServletRequest req){
   
    	// 上传文件路径
        String realPath = req.getSession().getServletContext().getRealPath("/uploadFile/");
        String format = sdf.format(new Date());
        File folder = new File(realPath + format);
        // 判断文件夹是否存在
        if(!folder.isDirectory()){
   
            folder.mkdirs();
        }
        // 获取原始名字
        String oldName = uploadFile.getOriginalFilename();
        String newName = UUID.randomUUID().toString() + oldName.substring(oldName.lastIndexOf("."), oldName.length());
        try{
   
            uploadFile.transferTo(new File(folder, newName));
            String filePath = req.getScheme() + "://" + req.getServerName() + ":" + req.getServerPort() + "/uploadFile/" + format + newName;
            return filePath;
        }catch (IOException e){
   
            e.printStackTrace();
        }
        return "上传失败";
    }

	// 批量即在单个的基础上增加遍历
    @PostMapping("/uploads")
    public String uploads(MultipartFile[] uploadFiles, HttpServletRequest req){
   
        ArrayList<String> pathList = new ArrayList<>();
        for(MultipartFile uploadFile : uploadFiles){
   
            String realPath = req.getSession().getServletContext().getRealPath("/uploadFile/");
            String format = sdf.format(new Date());
            File folder = new File(realPath + format);
            if(!folder.isDirectory()){
   
                folder.mkdirs();
            }
            String oldName = uploadFile.getOriginalFilename();
            String newName = UUID.randomUUID().toString() + oldName.substring(oldName.lastIndexOf("."), oldName.length());
            try{
   
            	// 将上传文件保存到一个目标文件中
                uploadFile.transferTo(new File(folder, newName));
                String filePath = req.getScheme() + "://" + req.getServerName() + ":" + req.getServerPort() + "/uploadFile/" + format + newName;
                pathList.add(filePath);
            }catch (IOException e){
   
                e.printStackTrace();
            }
        }
        return pathList.toString();
        //return "上传失败";
    }
}

在这里插入图片描述

bytell getBytes()。获取文件数据
String getContentType()。获取文件 MIME 类型,如 image/ipeg 等.
InputStream getlnputStream()。获取文件流
String getName()。获取表单中文件组件的名字。
String getOriginalFilename()。获取上传文件的原名
long getSize()。获取文件的字节大小,单位为 byte。
boolean isEmpty()。是否有上传的文件
void transferTo(File dest)。将上传文件保存到一个目标文件中。

前台

 单个上传
<form action="/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="uploadFile" value="请选择文件"/>
    <input type="submit" value="上传">
</form>
多个上传
<form action="/uploads" method="post" enctype="multipart/form-data">
    <input type="file" name="uploadFiles" value="请选择文件" multiple/>
    <input type="submit" value="上传">
</form>

文件下载

@GetMapping("/download")
    public ResponseEntity<InputStreamResource> downloadFile(HttpServletRequest req, @RequestParam("filename") String filename) throws IOException{
   
        // 下载文件路径
        String path = req.getSession().getServletContext().getRealPath("/uploadFile/");
        // File.separator /
        InputStream is = new FileInputStream(path + File.separator + filename);
        InputStreamResource resource = new InputStreamResource(is);
        HttpHeaders headers = new HttpHeaders();
        // 通知浏览器以attachment(下载方式)打开图片
        headers.add("Content-Disposition", "attachment; filename=\"" + filename + "\"");
        headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
        headers.add("Pragma", "no-cache");
        headers.add("Expires", "0");

        return ResponseEntity.ok()
                .headers(headers)
                .contentLength(is.available())
                // 二进制流数据(最常见的文件下载)
                .contentType(MediaType.parseMediaType("application/octet-stream"))
                .body(resource);
    }

相关推荐

  1. SpringBoot 下载文件

    2023-12-28 07:38:02       60 阅读
  2. SpringBoot+HttpClient实现文件下载

    2023-12-28 07:38:02       26 阅读
  3. 文件下载

    2023-12-28 07:38:02       31 阅读
  4. springboot实现七牛云的文件下载

    2023-12-28 07:38:02       30 阅读
  5. SperingBoot+vue文件&下载&预览

    2023-12-28 07:38:02       67 阅读
  6. springboot 文件

    2023-12-28 07:38:02       46 阅读
  7. springboot文件

    2023-12-28 07:38:02       42 阅读
  8. sftp下载文件

    2023-12-28 07:38:02       59 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-28 07:38:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-28 07:38:02       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-28 07:38:02       82 阅读
  4. Python语言-面向对象

    2023-12-28 07:38:02       91 阅读

热门阅读

  1. APP打包如何生成

    2023-12-28 07:38:02       61 阅读
  2. Python地理数据机器学习数学

    2023-12-28 07:38:02       64 阅读
  3. git 项目带分支迁移到另一个 git 仓库

    2023-12-28 07:38:02       54 阅读
  4. 对话面试官---关于死锁----通俗易懂版

    2023-12-28 07:38:02       59 阅读
  5. 八股文打卡day11——计算机网络(11)

    2023-12-28 07:38:02       52 阅读
  6. UDP Ping程序实现--第4关:客户端创建UDP套接字

    2023-12-28 07:38:02       53 阅读
  7. Mybatis-Plus基础之Mapper增删改

    2023-12-28 07:38:02       54 阅读
  8. vol----学习随记!!!

    2023-12-28 07:38:02       55 阅读
  9. flask文件夹列表前文修订版

    2023-12-28 07:38:02       53 阅读