Skip to content

Commit b17a0ee

Browse files
committed
feat: 添加传入 multipartfile 类型的文件,直接解析CSV.
1 parent 9f64ea8 commit b17a0ee

File tree

2 files changed

+47
-0
lines changed

2 files changed

+47
-0
lines changed

springboot-aop/src/main/java/com/study/module/controller/StuController.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,13 @@
44
import com.study.module.entity.Stu;
55
import com.study.module.enums.BusinessType;
66
import com.study.module.service.StuService;
7+
import com.study.module.util.office.CsvUtil;
78
import org.springframework.util.ObjectUtils;
89
import org.springframework.web.bind.annotation.*;
10+
import org.springframework.web.multipart.MultipartFile;
911

1012
import javax.annotation.Resource;
13+
import java.util.Map;
1114

1215
/**
1316
* (Stu)表控制层
@@ -24,6 +27,17 @@ public class StuController {
2427
@Resource
2528
private StuService stuService;
2629

30+
/**
31+
* 读取CSV文件
32+
*
33+
* @param multipartFile 文件
34+
* @return JSON Data
35+
*/
36+
@PostMapping("/readCSV")
37+
public Map<String, Object> readCSV(@RequestParam(value = "multipartFile") MultipartFile multipartFile) {
38+
return CsvUtil.readCsv(multipartFile, true);
39+
}
40+
2741
/**
2842
* 通过主键查询单条数据
2943
*

springboot-aop/src/main/java/com/study/module/util/office/CsvUtil.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import lombok.Data;
77
import lombok.NoArgsConstructor;
88
import org.springframework.util.ObjectUtils;
9+
import org.springframework.web.multipart.MultipartFile;
910

1011
import java.io.*;
1112
import java.lang.reflect.Field;
@@ -156,6 +157,38 @@ public static Map<String, Object> readCsv(String csvFilePath, boolean isHasHeade
156157
return result;
157158
}
158159

160+
/**
161+
* 解析 CSV 文件,返回CSV的数据。
162+
*
163+
* @param multipartFile controller 前端上传文件类型的参数值提交。
164+
* @param isHasHeader csv文件中是否包含表头数据
165+
* @return {"data":[...], "header": []} 其中可有可无
166+
*/
167+
public static Map<String, Object> readCsv(MultipartFile multipartFile, Boolean isHasHeader) {
168+
Map<String, Object> result = new HashMap<>(2);
169+
try {
170+
// 中文乱码问题:源文件的编码格式与程序设置的读取格式不一致所致(调整csv文件为UTF-8集合)
171+
DataInputStream in = new DataInputStream(multipartFile.getInputStream());
172+
BufferedReader reader = new BufferedReader(new InputStreamReader(in, "gbk"));
173+
if (isHasHeader) {
174+
result.put("header", reader.readLine());
175+
}
176+
String line;
177+
List<List<String>> dataList = new ArrayList<>();
178+
while ((line = reader.readLine()) != null) {
179+
String[] parts = splitCSV(line);
180+
if (!ObjectUtils.isEmpty(parts)) {
181+
List<String> lineData = Arrays.asList(parts);
182+
dataList.add(lineData);
183+
}
184+
}
185+
result.put("data", dataList);
186+
} catch (Exception exception) {
187+
exception.printStackTrace();
188+
}
189+
return result;
190+
}
191+
159192
public static void testSplitCSV() {
160193
String src1 = "\"fh,zg\",sdf,\"asfs,\",\",dsdf\",\"aadf\"\"\",\"\"\"hdfg\",\"fgh\"\"dgnh\",hgfg'dfh,\"asdfa\"\"\"\"\",\"\"\"\"\"fgjhg\",\"gfhg\"\"\"\"hb\"";
161194
try {

0 commit comments

Comments
 (0)