- 创建文件工具类
- 上传文件
- 导出文件
- 相关注意点
- 创建文件工具类
@Log4j2
public class FileUtil {
/**
* 读取文件内容输出str
* @param file file
* @return String
*/
public static String convertFile(MultipartFile file){
try {
FileInputStream fis = (FileInputStream) file.getInputStream();
byte[] buffer = new byte[100];
StringBuilder sb = new StringBuilder();
while (fis.read(buffer) != -1) {
sb.append(new String(buffer));
buffer = new byte[100];
}
fis.close();
//可能存在文件转str后,出现部分定义NUL的数据 故进行转义
return sb.toString().replaceAll("\\\00","");
}catch (Exception ex){
log.error(ex.getMessage(),ex);
}
return null;
}
/**
* 基础校验文件内容
* @param file file
* @return xxx
*/
public xxx checkFileData(MultipartFile file) {
//文件为空
if (file.isEmpty()) {
return xxx.FILE_IS_EMPTY;
}
//文件内容无法转换json
try {
String fileStr = FileUtil.convertFile(file);
convertImportJson(JSON.parseObject(fileStr));
} catch (Exception ex) {
return xxx.FILE_CONTENT_ILLEGAL_FORMAT;
}
return xxx.SUCCESS;
}
}
- 上传文件--接收MultipartFile类型的文件后,解析文件内容(注意微服务之间调用需要使用相关特殊的请求头)
-
@PostMapping(value = "/xx/importFile", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) BiteFlowImportResponse importFile(@RequestPart(value = "file") MultipartFile file);
String fileStr = FileUtil.convertFile(file); JSONObject importJson = convertImportJson(JSON.parseObject(fileStr)); //去除json中的相关null值 JSONObject prepareJson = JSON.parseObject(importJson.toJSONString()); //如果需要对相关日期格式进行改造 prepareJson.put(jsonKey, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(processJson.getString(jsonKey)));
- 导出文件--需要确定相关response的请求头的格式
public void exportFile(HttpServletResponse response) throws Exception {
String exportJson = "";
if (ObjectUtils.isEmpty(exportJson)) {
response.sendError(404, "file is empty");
return;
}
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
//设置相关的请求头格式
response.setContentType(ContentType.APPLICATION_OCTET_STREAM.getMimeType());
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;fileName=" + flowType.getValue() + "_" + format.format(new Date()) + ".json");
response.setHeader(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "Content-Disposition");
response.setCharacterEncoding("utf-8");
byte[] bytes = exportJson.getBytes(StandardCharsets.UTF_8);
response.getOutputStream().write(bytes);
//注意相关请求方需要对应修改response响应格式为blob 否则就是正常调用无法下载了
}
- 相关注意点
1.注意微服务携带文件调用需要加请求格式
@PostMapping(value = "/xx/importFile", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
2.相关响应时需要加请求头格式