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
相关推荐
Wang's Blog4 小时前
Java 项目实战: 外卖平台优化-Nginx配置文件结构与块层级
java·开发语言·nginx
\光辉岁月/5 小时前
5.java-数组
java·开发语言
谢亮_vipxieliang6 小时前
Spring 事务失效的常见场景
java·开发语言·数据库·spring boot
郑州光合科技余经理6 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
2601_962071576 小时前
类变量和全局变量的生命周期有什么区别?
java·开发语言·jvm
code2cat6 小时前
Java进阶篇之AtomicReference:一次替换引用,读到一份完整状态
java·并发编程·不可变对象·atomicreference
专业程序开发源6 小时前
springboot简历管理系统81389-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·php·课程设计
Wang's Blog6 小时前
Java 项目实战: 外卖平台优化-前后端分离开发模式与工程拆分
java·开发语言
专业程序开发源6 小时前
springboot社区养老系统44071-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·django·php·课程设计
余槐i7 小时前
数据没回滚也不报错:@Transactional 自调用失效的 3 种复现与修复
spring boot·mysql·多线程·spring 事务