springboot中文件上传到本地

文件上传的业务是我们经常遇到的,那么在spring中该怎么处理这个业务呢?

文件上传三个基础

  • <input type="file" name="image">
  • enctype="multipart/form-data" 这里必须是这个类型,否则上传不了,默认的是application/x-www-form-urlencoded只能上传文本格式的文件。不能用于发送文件
  • action="/api/upload" method="post"
html 复制代码
<!DOCTYPE html>
<head>
    <meta charset="UTF-8">
    <title>Hello World</title>
</head>
<body>
   <form action="/api/upload" method="post" enctype="multipart/form-data">
       <input type="text" name="name">
       <input type="text" name="age">
       <input type="file" name="image">
       <input type="submit" value="Submit">
   </form>
</body>
</html>

接口处理

java 复制代码
package com.itheima.controller;


import com.itheima.pojo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

@Slf4j
@RestController
@RequestMapping("/upload")
public class UploadController {


    @PostMapping
    public Result upload(String name, Integer age, MultipartFile image) throws Exception {
        log.info("文件上传成功 {},{},{}",name,age,image);
        String originalFilename = image.getOriginalFilename();
        image.transferTo(new File("D:\\360Downloads\\"+originalFilename));
        return Result.success();
    }

}

这样,我们就能在D:\360Downloads中看到上传的文件了



文件名优化

如果我们直接使用上传的文件名,会导致同名的被覆盖,造成文件的丢失

java 复制代码
@PostMapping
    public Result upload(String name, Integer age, MultipartFile image) throws Exception {
        log.info("文件上传成功 {},{},{}",name,age,image);

        String originalFilename = image.getOriginalFilename();
        int index = originalFilename.lastIndexOf(".");
        String extname = originalFilename.substring(index);
        String filename = UUID.randomUUID().toString() + extname;
        image.transferTo(new File("D:\\360Downloads\\"+filename));
        return Result.success();
}
java 复制代码
# 配置单个文件上传大小限制
spring.servlet.multipart.max-file-size=10MB

# 配置单个请求最大大小的限制,一次请求中是可以上传多个文件
spring.servlet.multipart.max-request-size=100MB
相关推荐
Wang15305 小时前
jdk内存配置优化
java·计算机网络
0和1的舞者6 小时前
Spring AOP详解(一)
java·开发语言·前端·spring·aop·面向切面
Wang15306 小时前
Java多线程死锁排查
java·计算机网络
小小星球之旅6 小时前
CompletableFuture学习
java·开发语言·学习
利刃大大7 小时前
【SpringBoot】Spring事务 && @Transactional详解 && Spring事务失效问题
spring boot·spring·事务
jiayong237 小时前
知识库概念与核心价值01
java·人工智能·spring·知识库
皮皮林5517 小时前
告别 OOM:EasyExcel 百万数据导出最佳实践(附开箱即用增强工具类)
java
Da Da 泓8 小时前
多线程(七)【线程池】
java·开发语言·线程池·多线程
To Be Clean Coder8 小时前
【Spring源码】getBean源码实战(三)
java·mysql·spring
Wokoo78 小时前
开发者AI大模型学习与接入指南
java·人工智能·学习·架构