1.yml文件配置文件配置:
#控制文件上传大小,-1不控制大小
servlet:
multipart:
max-file-size: -1
max-request-size: -1
2.上传文件
上传到指定服务器,后返回id和name(id属性要赋值到相关业务表中)
@RequestMapping("/upLoad")
@ResponseBody
public String upload(@RequestParam("file") MultipartFile file, @RequestParam("BUSINESSCODE") String BUSINESSCODE, @RequestParam("TYPECODE") String TYPECODE) {
logger.info("******文件上传开始******");
Map<String, String> resMap = new HashMap<>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
if (!file.isEmpty()) {
try {
logger.info("BUSINESSCODE:" + BUSINESSCODE);
logger.info("TYPECODE:" + TYPECODE);
String fileName = file.getOriginalFilename();//文件名
logger.info("原文件名:" + fileName);
String fileType = (fileName.lastIndexOf(".") >= 0) ? fileName.substring(fileName.lastIndexOf("."), fileName.length()) : "";//文件类型
logger.info("文件类型:" + fileType);
String fileId = UUID.randomUUID().toString().replaceAll("-", "");//返回的文件ID
//logger.info("文件ID:" + fileId);
String dir = new StringBuilder().append(this.uploadPath).append("/").append(sdf.format(new Date())).append("/").append(BUSINESSCODE).append("/").append(TYPECODE).toString();//文件夹地址
logger.info("文件夹地址:" + dir);
File dirFile = new File(dir);//生成文件
if (!dirFile.exists()) {
dirFile.mkdirs();
}
//String newFileName = new StringBuilder().append(fileId).append(fileType).toString();//服务器存储的文件名
//logger.info("存储的文件名:" + newFileName);
String path = new StringBuilder().append(dir).append("/").append(fileName).toString();
;//文件存储路径
logger.info("文件存储路径:" + path);
File fileFile = new File(path);
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(fileFile));
out.write(file.getBytes());
out.flush();
out.close();
//保存数据库
com.claims.loadmanage.entity.File fileInFo = new com.claims.loadmanage.entity.File();
fileInFo.setFileId(fileId);
fileInFo.setFileName(fileName);
fileInFo.setLocalPath(path);
fileInFo.setCreatetime(new Date());
fileInFo.setSize(fileFile.length());
int saveResInt = loadManageService.insertSelective(fileInFo);
//Map<String, String> rowsMap = new HashMap<>();
if (saveResInt > 0) {
//rowsMap.put("FILEID",fileId);
//rowsMap.put("FILENAME", fileName);
resMap.put("FLAG", "true");
resMap.put("FILEID", fileId);
resMap.put("FILENAME", fileName);
resMap.put("MSG", "文件上传成功");
} else {
resMap.put("FLAG", "false");
resMap.put("MSG", "文件上传失败");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
resMap.put("FLAG", "false");
resMap.put("MSG", "文件上传失败");
} catch (IOException e) {
resMap.put("FLAG", "false");
resMap.put("MSG", "文件上传失败");
}
} else {
resMap.put("FLAG", "false");
resMap.put("MSG", "上传文件为空");
}
logger.info("文件上传返回信息:" + JSON.toJSONString(resMap));
logger.info("******文件上传结束******");
return JSON.toJSONString(resMap);
}
3.导出列表页全部文件(zip)
例如半身照导出
/**
* 半身照导出
*/
@RequestMapping("/halfPhotoDownLoad")
@ResponseBody
public String halfPhotoDownLoad(@RequestBody String paramStr){
logger.info("******半身照导出开始******");
//1.获取基础数据
String res = estimatorManageFeignClientService.selectEstimatorHalfPhoto(paramStr);
logger.info("半身照导出查询公估师返回:" + res);
//解析出参
Map<String, String> resMap = JSON.parseObject(res, Map.class);
List<Map<String, String>> rowsList = JSON.parseObject(JSON.toJSONString(resMap.get("resultInfo")), List.class);
logger.info("半身照导出返回信息解析后:" + JSON.toJSONString(rowsList));
//2.根据半身照ID查询影像路径,保存到指定文件夹
//保存到指定文件夹
File fileStorageDir = new File("/opt/claims/storage/");//暂存文件路径
if (!fileStorageDir.exists()) {//新建文件夹
fileStorageDir.mkdir();
}
Map<String, String> ressMap = new HashMap<>();
for (Map<String, String> rowsMap : rowsList) {
List<Map<String, String>> halMap = JSON.parseObject(JSON.toJSONString(rowsMap.get("HALFLENGTHIMGJSON")), List.class);
int i=1;
for (Map fileMap : halMap) {
String fileId = fileMap.get("fileId").toString();//半身照ID
logger.info("半身照ID:" + fileId);
String estimatorCode = "";
if(halMap.size() == 1){
estimatorCode = rowsMap.get("ESTIMATORNAME")+"-"+rowsMap.get("CREDENTALNUM");//姓名+身份证
}else{
estimatorCode = rowsMap.get("ESTIMATORNAME")+"-"+rowsMap.get("CREDENTALNUM")+"("+i+")";//姓名+身份证
i++;
}
logger.info("组合文件名:" + estimatorCode);
//查文件路径
com.claims.loadmanage.entity.File fileInFo = loadManageService.selectFilePath(fileId);
logger.info("查找到的文件信息:" + JSON.toJSONString(fileInFo));
String sourceFilePath = fileInFo.getLocalPath();//原文件路径
String sourceFileName = fileInFo.getFileName();//原文件名
rowsMap.put("FILEPATH", sourceFilePath);
File sourceFile = new File(sourceFilePath);//原文件
String fileType = (sourceFileName.lastIndexOf(".") >= 0) ? sourceFileName.substring(sourceFileName.lastIndexOf("."), sourceFileName.length()) : "";//原文件类型
logger.info("文件类型:" + fileType);
String nowFileName = estimatorCode + fileType;//现文件名
logger.info("现文件名:" + nowFileName);
String nowFilePath = fileStorageDir.toString() + File.separator + nowFileName;//现文件地址
logger.info("现文件地址:" + nowFilePath);
try {
InputStream fileInputStream = new FileInputStream(sourceFile);//源文件放输入流
OutputStream fileOutputStream = new FileOutputStream(nowFilePath);//现文件放输出流
BufferedInputStream bis = new BufferedInputStream(fileInputStream);
byte[] buffer = new byte[1024];
int len = 0;
while ((len = fileInputStream.read(buffer)) > 0) {
fileOutputStream.write(buffer, 0, len);
}
if (fileOutputStream != null) {
fileOutputStream.close();
}
if (bis != null) {
bis.close();
}
if (fileInputStream != null) {
fileInputStream.close();
}
} catch (FileNotFoundException e) {
ressMap.put("FLAG", "false");
ressMap.put("MSG", "导出文件为空");
e.printStackTrace();//找不到文件
} catch (IOException e) {
ressMap.put("FLAG", "false");
ressMap.put("MSG", "文件写入错误");
e.printStackTrace();//流错误
}
}
}
//3.打包指定文件夹中的文件
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");//设置日期格式
Date date = new Date();
String zipName = "HALFLENGTHIMG" + df.format(date) + ".zip";
logger.info("压缩包名称:" + zipName);
String fileID = null;
try {
zipName = URLEncoder.encode(zipName, "utf-8");
File zipPath1 = new File("/opt/claims/zip/" );//压缩文件存放地址
logger.info("压缩文件存放地址:" + zipPath1);
if (!zipPath1.exists()) {
zipPath1.mkdir();
logger.info("创建压缩包文件路径");
}
File zipPath = new File("/opt/claims/zip/" + df.format(date));//压缩文件存放地址
logger.info("压缩文件存放地址:" + zipPath);
if (!zipPath.exists()) {
zipPath.mkdir();
logger.info("创建压缩包文件路径");
}
File[] files = new File("/opt/claims/storage/").listFiles();//原文件地址
logger.info("文件个数:"+files.length);
String path1= zipPath.getPath()+zipName;
FileOutputStream fos = new FileOutputStream(new File(path1));
BufferedOutputStream bo = new BufferedOutputStream(fos);
ZipOutputStream out = new ZipOutputStream(bo);
byte[] buf = new byte[1024];
logger.info("开始压缩:");
if (files != null) {
for (int i = 0; i < files.length; i++) {
String fie = files[i].toString();
FileInputStream inputStream = new FileInputStream(fie);
out.putNextEntry(new ZipEntry(files[i].getName()));
int len;
if (inputStream.available() > 0) {
while ((len = inputStream.read(buf)) > 0) {
out.write(buf, 0, len);
}
}
inputStream.close();
System.gc();//回收资源
boolean delete = files[i].delete();
logger.info(delete == true ? "暂存文件删除成功" : "暂存文件删除失败");
}
bo.flush();
out.closeEntry();
out.close();
logger.info("******文件打包完成******");
new File("/opt/claims/storage/").delete();
//将压缩文件上传
String path = loadPath + "?BUSINESSCODE=zip&TYPECODE=zip";
String resInFo = null;
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httppost = new HttpPost(path);
File zipfile = new File(path1);
FileBody fileBody = new FileBody(zipfile);
FormBodyPart filePart = new FormBodyPart("file", fileBody);
MultipartEntity multipartEntity = new MultipartEntity();
multipartEntity.addPart(filePart);
httppost.setEntity(multipartEntity);
CloseableHttpResponse httpResponse = httpClient.execute(httppost);
HttpEntity entity = httpResponse.getEntity();
res = EntityUtils.toString(entity, "UTF-8");
//解析返回信息
logger.info("上传返回信息:" + res);
Map<String, String> httpResMap = JSON.parseObject(res, Map.class);
fileID = httpResMap.get("FILEID");
ressMap.put("FILEID",fileID);
ressMap.put("FLAG", "true");
logger.info("返回的文件ID:" + fileID);
httpResponse.close();
//删除
File[] zipfiles = new File("/opt/claims/zip/" + df.format(date)).listFiles();
for (int n = 0; n < zipfiles.length; n++) {
boolean delete = zipfiles[n].delete();
logger.info(delete == true ? "半身照zip删除成功" : "半身照zip删除失败");
}
new File("/opt/claims/zip/" + df.format(date)).delete();
new File("/opt/claims/zip/").delete();
}
} catch (UnsupportedEncodingException e) {
ressMap.put("FLAG", "false");
ressMap.put("MSG", "文件写入错误");
e.printStackTrace();
} catch (FileNotFoundException e) {
ressMap.put("FLAG", "false");
ressMap.put("MSG", "下载文件为空");
e.printStackTrace();
} catch (IOException e) {
ressMap.put("FLAG", "false");
ressMap.put("MSG", "文件写入错误");
e.printStackTrace();
}
logger.info("******半身照导出结束******");
logger.info("出参"+JSON.toJSONString(ressMap));
return JSON.toJSONString(ressMap);
}
4.除了这些,也有一些excel的上传下载;
下载和上述的类似
上传时,分两步,第一步,上传文件,返回id
第二步,调用excel解析服务,获取数据库配置,列对应,校验规则,
第三步,解析文件,按照列对应规则,匹配数据后,返回前台
第四步:(可有可无)对excel数据也可能会做处理
希望能够帮助到你们