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
相关推荐
数电发票API1 分钟前
线上充值自动开票攻略:四步落地,告别人工低效内耗
java
想用offer打牌6 分钟前
Spring AI vs Spring AI Alibaba
java·人工智能·后端·spring·系统架构
顾北1218 分钟前
Java接入阿里百炼大模型实战指南
java·ai
毕设源码-郭学长19 分钟前
【开题答辩全过程】以 高校水电表缴费系统的设计与实现为例,包含答辩的问题和答案
java
win x19 分钟前
网络通信协议 第一部
java·网络协议
guslegend21 分钟前
第6章:SpringBoot 拦截器-监听器实战
spring boot
黎雁·泠崖1 小时前
Java面向对象:对象数组进阶实战
java·开发语言
sg_knight1 小时前
工厂方法模式(Factory Method)
java·服务器·python·设计模式·工厂方法模式·工厂模式
%xiao Q1 小时前
GESP C++四级-216
java·开发语言·c++
码农幻想梦1 小时前
实验五 spring入门及IOC实验
java·后端·spring