一般前端将数组数据传给后台接口时,需要转换成json。
但如果数据量太大,后台接口用String接收前端传过来的json数据会为null值。
这种情况下 前台可以将数据转成json后放入文件中,后台接口读取传过来的文件内容 然后进行解析。
代码如下
saveResult() {
var content = JSON.stringify(this.resultList);
var blob = new Blob([content], {type : 'text/plain;charset=utf-8'});
let file = new File([blob], "test.json", {type: 'application/json',lastModified: Date.now()})
var formData = new FormData();
formData.append('file', file);
$.ajax({
url:`${config.baseUrl}/transaction/saveTransactionResultList`,
type:'POST',
data:formData,
cache: false,
processData: false,
contentType: false,
success:(res)=>{
if(res.code){
layer.msg('保存成功');
console.log(res);
}
}
});
},
/**
* 批量新增交易结果数据记录
* @param file 交易结果数据 json
* @return 成功或失败消息
*/
@RequestMapping(value = "/saveTransactionResultList", produces = "application/json;charset=utf-8")
public String saveTransactionResultList(MultipartFile file) {
try {
String fileContent = FileUtil.getFileContent(filePath);
List<TransactionResult> transactionResultList = JSON.parseArray(fileContent,TransactionResult.class);
// 数据量过大时会因为sql过长报异常 此处将超过2000条的数据分批存储 每次最多存储2000条。
while (transactionResultList.size() > 0) {
if(transactionResultList.size() > 2000) {
List<TransactionResult> tempList = transactionResultList.subList(0, 2000);
transactionResultService.saveTransactionResultList(tempList);
transactionResultList.removeAll(tempList);
continue;
}
transactionResultService.saveTransactionResultList(transactionResultList);
break;
}
return Result.success().toJsonString();
}catch (Exception e){
e.printStackTrace();
//将异常信息写入日志
LOGGER.error(FileUtil.getExceptionMsg(e));
return Result.error("新增失败").toJsonString();
}
}
/**
* 获取文件内容
* 用于前端传来大量数据时 将数据字符串放入文件中再传到后台
*
* @param file 文件对象
*/
public static String getFileContent(MultipartFile file) {
StringBuilder result = new StringBuilder();
try(Reader reader = new InputStreamReader(file.getInputStream(), StandardCharsets.UTF_8);
BufferedReader br = new BufferedReader(reader)) {
String line;
while ((line = br.readLine()) != null) {
// 一次读入一行数据
if(StringUtils.isNotBlank(line)){
result.append(line);
}
}
} catch (IOException e) {
e.printStackTrace();
}
return result.toString();
}


被折叠的 条评论
为什么被折叠?



