springboot上传文件接收为null解决

本文介绍如何在Spring Boot应用中实现文件上传功能。通过在启动类上排除MultipartAutoConfiguration并自定义上传配置,可以更好地控制文件上传过程。此外,还介绍了如何在控制器中接收上传的文件,并给出了必要的依赖项。

1.启动类上加入注解 

@SpringBootApplication(exclude = {MultipartAutoConfiguration.class})

2.创建上传配置文件

@Configuration
public class UploadConfig {
    @Bean(name="multipartResolver")
    public MultipartResolver multipartResolver(){
        return new CommonsMultipartResolver();
    }
}

3.为参数加入注解  @RequestParam("file")

    @PostMapping("/importData")
    public Result importDict(@RequestParam("file") MultipartFile file){
        
        dictService.importDictData(file);
        
        return Result.ok();
    }

4. 添加 commons-fileupload 依赖

  <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.3.1</version>
  </dependency>

Spring Boot项目中实现文件上传并导出数据到Excel,可以通过结合使用常见的库如`MultipartResolver`处理上传、`EasyExcel`或`Apache POI`进行Excel的读写操作。以下是一个完整的实现示例。 ### 3.1 文件上传与Excel数据导出流程 #### 3.1.1 添加依赖 首先,在`pom.xml`中添加必要的依赖项以支持文件上传和Excel操作: ```xml <!-- Spring Boot Web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- EasyExcel for Excel processing --> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>3.1.1</version> </dependency> <!-- Apache Commons IO (可选,用于文件操作) --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.11.0</version> </dependency> ``` #### 3.1.2 定义数据模型类 假设我们要处理的学生信息如下所示: ```java public class Student { private Long id; private String name; private Integer age; // Getters and Setters } ``` #### 3.1.3 文件上传与数据处理控制器 下面是一个完整的控制器类,它接收上传文件,将其解析为数据,并将这些数据导出为Excel文件供用户下载: ```java @RestController @RequestMapping("/upload") public class FileUploadController { @PostMapping("/export") public void uploadAndExport(@RequestParam("file") MultipartFile file, HttpServletResponse response) throws IOException { // 1. 读取上传文件内容(假设是文本格式) List<Student> students = new ArrayList<>(); BufferedReader reader = new BufferedReader(new InputStreamReader(file.getInputStream())); String line; while ((line = reader.readLine()) != null) { String[] parts = line.split(","); if (parts.length == 3) { Student student = new Student(); student.setId(Long.valueOf(parts[0])); student.setName(parts[1]); student.setAge(Integer.valueOf(parts[2])); students.add(student); } } // 2. 设置响应头以便浏览器下载Excel文件 String fileName = "students_export_" + System.currentTimeMillis() + ".xlsx"; response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setHeader("Content-Disposition", "attachment; filename=" + fileName); // 3. 使用EasyExcel写出Excel EasyExcel.write(response.getOutputStream()) .head(Student.class) .excelType(ExcelTypeEnum.XLSX) .sheet("学生信息") .doWrite(students); } } ``` #### 3.1.4 前端上传接口调用示例(HTML+JavaScript) 你可以使用简单的HTML表单来测试文件上传功能: ```html <form action="/upload/export" method="post" enctype="multipart/form-data"> <input type="file" name="file" /> <button type="submit">上传并导出Excel</button> </form> ``` 或者使用JavaScript(例如通过`fetch`)进行更灵活的请求: ```javascript const formData = new FormData(); formData.append('file', fileInput.files[0]); fetch('/upload/export', { method: 'POST', body: formData }).then(response => { const url = window.URL.createObjectURL(new Blob([response.data])); const link = document.createElement('a'); link.href = url; link.setAttribute('download', 'students_export.xlsx'); document.body.appendChild(link); link.click(); }); ``` ### 3.2 优化建议 - **数据验证**:在实际应用中,应加入对上传文件格式的校验,避免非法格式导致程序异常。 - **异步处理**:对于大文件处理,建议采用异步方式,防止阻塞主线程影响性能。 - **自定义列映射**:若字段名与Excel列不一致,可通过注解`@ExcelProperty`指定对应关系[^1]。 - **错误处理**:添加全局异常处理器(如`@ControllerAdvice`),统一捕获并返回错误信息给前端。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值