MultipartFile处理Excel文件,文件中只有一列数据,将MultipartFile转换成List<String>集合
时间: 2025-05-26 16:33:44 浏览: 20
### 修改后的 Spring Boot 接口实现
为了满足在 `@PostMapping("/importData")` 接口中添加编号参数,并将 `MultipartFile` 类型的 Excel 文件中的一列数据转换为 `List<String>` 集合的要求,可以按以下方式进行调整。
#### 后端接口实现
以下是完整的后端代码实现:
```java
@PostMapping("/importData")
public ResponseEntity<List<String>> importData(
@RequestParam("file") MultipartFile file,
@RequestParam("number") String number) throws Exception {
// 检查文件是否为空
if (file.isEmpty()) {
throw new IllegalArgumentException("上传的文件不能为空");
}
// 使用 EasyPOI 工具读取 Excel 数据
ImportParams params = new ImportParams();
params.setTitleRows(1); // 设置标题行数
params.setHeadRows(2); // 设置头部行数
// 将 Excel 中的数据映射到实体类
List<EsaypoiTest> excelData = ExcelImportUtil.importExcel(file.getInputStream(), EsaypoiTest.class, params);
// 提取指定列的数据并转化为 List<String>
List<String> columnData = excelData.stream()
.map(EsaypoiTest::getColumnValue) // 替换为实际的目标字段获取方法
.filter(Objects::nonNull) // 过滤掉空值
.collect(Collectors.toList());
// 记录日志或打印调试信息
System.out.println("接收到的编号:" + number);
System.out.println("提取的列数据:" + columnData);
return ResponseEntity.ok(columnData);
}
```
在此代码中:
- 新增了 `number` 参数并通过 `@RequestParam` 绑定。
- 利用了 Java Stream API 来提取目标列的数据并过滤掉可能存在的空值[^1]。
- 返回的结果是一个 `List<String>` 集合,表示从 Excel 文件中提取出来的特定列数据。
---
#### 前端调用方式
针对上述后端接口的变化,前端需要按照新的要求发送请求。以下是具体的实现方式。
##### 表单提交
如果使用传统 HTML 表单提交的方式,则需要确保表单中有两个输入项:一个是文件选择框 (`<input type="file">`),另一个是编号输入框 (`<input type="text">`)。
```html
<form id="uploadForm" action="/importData" method="post" enctype="multipart/form-data">
<label for="file">选择文件:</label>
<input type="file" id="file" name="file" required />
<br /><br />
<label for="number">编号:</label>
<input type="text" id="number" name="number" required placeholder="请输入编号" />
<br /><br />
<button type="submit">上传</button>
</form>
```
此处需要注意设置 `enctype="multipart/form-data"` 属性以支持文件上传[^3]。
---
##### AJAX 提交
如果是基于 JavaScript 或者框架(如 Axios/Vue.js),则可以通过 FormData 对象构建请求体。
```javascript
function uploadFileAndNumber(fileInput, numberValue) {
const formData = new FormData();
formData.append('file', fileInput.files[0]); // 添加文件对象
formData.append('number', numberValue); // 添加编号参数
fetch('/importData', {
method: 'POST',
body: formData
})
.then(response => response.json())
.then(data => {
console.log('返回的列表数据:', data);
})
.catch(error => console.error('错误:', error));
}
// 调用示例
const fileInput = document.getElementById('file');
const numberValue = document.getElementById('number').value;
if (fileInput && numberValue) {
uploadFileAndNumber(fileInput, numberValue);
} else {
alert('请选择文件并填写编号!');
}
```
此代码片段展示了如何利用 Fetch API 构建一个多部分表单请求,并将其发送至 `/importData` 接口[^2]。
---
### 注意事项
1. **参数校验**
在实际开发中,应对传入的 `number` 参数进行必要的非空验证以及其他业务逻辑约束。
2. **异常处理**
应考虑各种潜在的异常场景,例如文件格式不正确、Excel 数据缺失等情况,并提供友好的提示信息。
3. **性能优化**
如果涉及大规模数据导入操作,建议引入分页机制或者异步任务队列来提升系统的稳定性和响应速度。
---
阅读全文
相关推荐


















