SpringBoot实现文件上传的多种方式

https://baijiahao.baidu.com/s?id=1748180186003034716&wfr=spider&for=pc


package com.szl.linuxfileoperation.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.ClassUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.PrintWriter;
import java.util.Map;
import java.util.UUID;


@RestController
@Slf4j
public class UploadController {

    //上传路径
    @Value("${document.uploadPath}")
    private String uploadPath;

    @RequestMapping("/uploading")
    public void upload(HttpServletRequest request, PrintWriter out) {
        //将请求转为文件上传请求
        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();

        MultipartFile multipartFile;

        for (Map.Entry<String, MultipartFile> set : fileMap.entrySet()) {
            //这里是数据提交时的key
            //String filekey = set.getKey();
            //这是文件数据本身
            multipartFile = set.getValue();
            //保存文件,同时保存的文件名称返回
            out.print(this.storeIOc(multipartFile));
        }

    }

    private String storeIOc(MultipartFile file) {
        //使用tomcat运行目录来拼接上传路径
        //String realPath = request.getServletContext().getRealPath(uploadPath + File.separator);
        // 获取class运行目录拼接上传路径
        String realPath = ClassUtils.getDefaultClassLoader().getResource("").getPath() + uploadPath + File.separator;
        // 建立class运行目录下文件夹
        File folder = new File(realPath);
        if (!folder.exists()) {
            folder.mkdirs();
        }
        String fileName;
        String logImageName = null;

        // 文件存在则执行保存
        if (!(file == null || file.isEmpty())) {

            String _fileName = file.getOriginalFilename();
            log.info("OriginalFilename: {}",_fileName);

            String suffix = ".JPEG";
            String baseName = "";

            if (_fileName.lastIndexOf(".") > 0) {
                suffix = _fileName.substring(_fileName.lastIndexOf("."));
                baseName = _fileName.substring(0, _fileName.lastIndexOf("."));
            }

            logImageName = UUID.randomUUID().toString() + "_" + baseName + "." + suffix;
            fileName = realPath + File.separator + logImageName;
            File restore = new File(fileName);

            try {
                file.transferTo(restore);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }

        return logImageName;
    }


}


package com.szl.linuxfileoperation.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.support.StandardServletMultipartResolver;

@Configuration
public class MultipartFileUploadConfiguration {
    @Bean
    public MultipartResolver multipartResolver() {
        StandardServletMultipartResolver multipartResolver = new StandardServletMultipartResolver();
        return multipartResolver;
    }
}


package com.szl.linuxfileoperation;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class LinuxFileOperationApplication {
    public static void main(String[] args) {
        SpringApplication.run(LinuxFileOperationApplication.class, args);
    }
}

application.yml

server:
  port: 9090

spring:
  servlet:
    multipart:
      max-file-size: 30MB #单个文件最大值
      max-request-size: 300MB # 上传文件总的最大值

document:
  uploadPath: data/wav  #文件上传路径
posted @   邵泽龙  阅读(555)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
点击右上角即可分享
微信分享提示