@RequestMapping(value = "/addDeviceReport", method = RequestMethod.POST, headers = "content-type=multipart/form-data")
public ApiResultVo<String> addDeviceReport(@RequestParam(value = "file", required = true) MultipartFile file, HttpServletRequest request) {
//获取原文件名
String name=file.getOriginalFilename();
System.out.println("name = " + name);
//获取文件后缀
String subffix=name.substring(name.lastIndexOf(".")+1,name.length());
//控制格式
if(subffix.equals("")||(!subffix.equals("json")&&!subffix.equals("txt"))) {
return ApiResultVo.error("文件格式不对");
}
int reCode = deviceReportService.addDeviceReport(file,request);
if (Constant.UPDATE_CODE == reCode){
return ApiResultVo.ok("SUCCESS");
}else {
return ApiResultVo.error("Failed!");
}
}
代码如上 要注意 设置method为post方式 校验格式正确以后 进行文件的转存
@Override
public int addDeviceReport(MultipartFile file, HttpServletRequest request) {
//新的文件名以日期命名
String fileName=new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
System.out.println("fileName = " + fileName);
log.info("fileName = " + fileName);
//获取项目路径到webapp
String filepath=request.getServletContext().getRealPath("/")+"files\\";
log.info("filepath = " + filepath);
System.out.println("filepath = " + filepath);
File fileFloder=new File(filepath);
//文件夹不存在就创建
if(!fileFloder.exists()) {
fileFloder.mkdirs();
}
//保存临时文件
File targetFile=new File(filepath,fileName);
try{
file.transferTo(targetFile);
FileInputStream fileInputStream=new FileInputStream(targetFile);
String secretKey = IOUtils.toString(fileInputStream);
System.out.println("secretKey = " + secretKey);
log.info("secretKey = " + secretKey);
try{
JSONObject jo= JSONObject.parseObject(secretKey);
DeviceReport deviceReport = JSON.parseObject(secretKey,DeviceReport.class);
DeviceReport report = getDeviceReport(deviceReport);
if (null != report){
return 0;
}
return deviceReportMapper.insert(deviceReport);
}catch (Exception e){
fileInputStream.close();
targetFile.delete();
}
//删除文件前关闭流,否则无法删除
fileInputStream.close();
targetFile.delete();
}catch (Exception e){
targetFile.deleteOnExit();
e.printStackTrace();
}
return 0;
}
注意获取文件路径 应该用服务器部署路径为准 否则会报错 No such file or directory