Spring Boot文件上传功能实现详解

一、文件上传核心实现
java 复制代码
// PersonController.java
@PostMapping("/excelUpload")
public Result excelUpload(@RequestParam("uploadExcel") MultipipartFile multipartFile) {
    // 1. 获取原始文件名
    String fileName = multipartFile.getOriginalFilename();
    
    // 2. 构建存储路径
    Path path = Paths.get(excelpath + fileName);
    System.out.println("文件保存路径: " + path);
    
    // 3. 保存文件到服务器
    try {
        multipartFile.transferTo(path);
    } catch (IOException e) {
        e.printStackTrace();
    }
    
    // 4. 返回成功响应
    return Result.ok().put("data", fileName);
}
二、关键技术组件解析
  1. MultipartFile接口

    • Spring提供的文件上传处理接口

    • 核心方法:

      • getOriginalFilename(): 获取原始文件名

      • transferTo(): 将文件保存到指定位置

      • getInputStream(): 获取文件输入流

  2. 文件路径配置

    bash 复制代码
    # application.properties
    file-upload.url=D:/javacode/community_vue/community/FileXls/
    • 通过@Value注解注入配置路径

      bash 复制代码
      @Value("${file-upload.url}")
      private String excelpath;
    • 路径处理工具

      • Paths.get(): 构建平台无关的文件路径

      • transferTo(): 将上传文件保存到指定位置

三、静态资源映射配置
java 复制代码
// WebMvVCconfigruation.java
@Configuration
public class WebMvVCconfigruation implements WebMvcConfigurer {
    @Value("${file-upload.url}")
    private String excelPath;

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 映射/FileXls/**到本地文件系统
        registry.addResourceHandler("/FileXls/**")
                .addResourceLocations("file:" + excelPath);
    }
}
四、完整上传流程
五、前端调用示例
html 复制代码
<!-- HTML表单 -->
<form action="/sys/person/excelUpload" method="post" enctype="multipart/form-data">
    <input type="file" name="uploadExcel" accept=".xls,.xlsx">
    <button type="submit">上传Excel</button>
</form>

<!-- AJAX调用 -->
<script>
function uploadExcel(file) {
    const formData = new FormData();
    formData.append('uploadExcel', file);
    
    fetch('/sys/person/excelUpload', {
        method: 'POST',
        body: formData
    })
    .then(response => response.json())
    .then(data => {
        console.log('上传成功:', data.data);
        // 访问上传的文件: http://localhost:8080/FileXls/filename.xls
    });
}
</script>
六、中文文件名乱码
html 复制代码
// 在application.properties中添加
spring.servlet.encoding.force=true
spring.servlet.encoding.charset=UTF-8
七、大文件上传优化
java 复制代码
// 分块上传处理
@PostMapping("/chunkUpload")
public Result chunkUpload(@RequestParam Chunk chunk) {
    // 实现分片合并逻辑
}

完整实现代码已包含在提供的Java文件中,通过结合Controller层的上传处理和MVC配置层的静态资源映射,实现了完整的文件上传和访问解决方案。

相关推荐
小wanga1 小时前
C++知识
java·开发语言·c++
我是渣哥2 小时前
Java String vs StringBuilder vs StringBuffer:一个性能优化的探险故事
java·开发语言·jvm·后端·算法·职场和发展·性能优化
工一木子2 小时前
深入Java并发:锁机制原理剖析与性能优化实战
java·性能优化·并发·
你我约定有三2 小时前
java--写在 try 中的创建连接
java·开发语言
ERP老兵-冷溪虎山2 小时前
Python/JS/Go/Java同步学习(第三篇)四语言“切片“对照表: 财务“小南“纸切片术切凭证到崩溃(附源码/截图/参数表/避坑指南/老板沉默术)
java·javascript·python·golang·中医编程·四语言同步学习·职场生存指南
科技树支点2 小时前
无GC的Java创新设计思路:作用域引用式自动内存管理
java·python·go·web·编程语言·编译器
码农小伙2 小时前
ConcurrentHashMap解析
java·开发语言
WhiteJunior2 小时前
Java基础知识点汇总(五)
java·开发语言
晚安里3 小时前
JVM相关 4|JVM调优与常见参数(如 -Xms、-Xmx、-XX:+PrintGCDetails) 的必会知识点汇总
java·开发语言·jvm·后端·算法
纪莫4 小时前
技术面:Java并发(线程池、ForkJoinPool)
java·java面试⑧股