springboot 模拟上次文件: MultipartFile + json餐食
首先来看,接口及参数
postman模拟上传
需求:将生成好的,远程excel附件,以及一些常规数据通过接口,传递过去。
代码部分:
1.将远程excel附件,转化为MultipartFile
public class FileToMultipartFileUtils {
/**
* 远程file文件转MultipartFile
* @param fileContentType
* @param filePath
* @return
*/
public static MultipartFile getMultipartFile(String fileContentType, String filePath) {
MultipartFile multipartFile = null;
try {
//文件转MultipartFile
log.info("文件转MultipartFile, fileContentType:{}, filePath:{}",fileContentType, filePath);
URL url = new URL(filePath);
DataSource dataSource = new URLDataSource(url);
DataHandler dataHandler = new DataHandler(dataSource);
DiskFileItem fileItem = (DiskFileItem) new DiskFileItemFactory().createItem("file",
MediaType.ALL_VALUE, true, dataHandler.getName());
IOUtils.copy(dataHandler.getInputStream(), fileItem.getOutputStream());
multipartFile = new CommonsMultipartFile(fileItem);
}catch (Exception e){
e.printStackTrace();
log.error("文件转MultipartFile失败-err:{}",e.getMessage());
}
return multipartFile;
}
}
2.主程序部分
@Override
public void postMailByMealOrder() {
Calendar rightNow = Calendar.getInstance();
int hour = rightNow.get(Calendar.HOUR_OF_DAY);
String startFltDate = null;
String endFltDate = null;
String currentDate = ComDateUtils.dateToStr(ComDateUtils.plusHours(new Date(), 24), ComDateUtils.YYYY_MM_DD);
if(hour <= 6){
//06:00:处理次日06-14(含)
startFltDate = currentDate + " 06:00:00";
endFltDate = currentDate + " 14:00:00";
}else if(hour <= 14){
//14:00:处理次日14-22(含)
startFltDate = currentDate + " 14:00:00";
endFltDate = currentDate + " 22:00:00";
}else if(hour <= 22){
//22:00:处理次日22-第三日06(含)
startFltDate = currentDate + " 22:00:00";
String lastDate = ComDateUtils.dateToStr(ComDateUtils.plusDays(new Date(), 2), ComDateUtils.YYYY_MM_DD);
endFltDate = lastDate + " 06:00:00";
}else{
return;
}
doOrderMealSummary(startFltDate, endFltDate);
}
private void doOrderMealSummary(String startFltDate, String endFltDate){
if(StringUtils.isEmpty(startFltDate) || StringUtils.isEmpty(endFltDate))
return;
//参数
MealSummaryQueryDTO queryDTO = new MealSummaryQueryDTO();
queryDTO.setFltDateStart(startFltDate);
queryDTO.setFltDateEnd(endFltDate);
//数据查询
List summaryBOS = orderMealSummaryService.adminExportTask(queryDTO);
if(summaryBOS==null || summaryBOS.size() < 1){
log.error("餐食订单汇总表-数据统计 is empty.");
return;
}
List orderSummaryBOS = orderMealInfoService.adminExportBySummaryTask(queryDTO);
//创建excel,并生成远程excel
ExcelMealSummaryUtil util = new ExcelMealSummaryUtil<>();
Workbook wb = new SXSSFWorkbook(500);
util.exportDataToCell(wb, ExportMealSummaryBO.class, summaryBOS,0,"餐食订单汇总表");
util.exportDataToCell(wb, ExportMealOrderSummaryBO.class, orderSummaryBOS,1,"餐食订单明细表");
AjaxResult result = util.exportExcelToFile(wb, "meal");
String filePath = riakPubUrl + "/" + (String) result.get("msg");
//sendMailService(filePath, null);
//发送邮件
//String filePath = "http://192.168.203.99:8098/buckets/joy-air/keys/meal_62ebfb4f-d69d-47cd-ac15-c6904aba977b.xlsx";
sendMailService(filePath, null);
}
上传附件,部分
private boolean sendMailService(String filePath, ListsummaryBOS){ MultipartFile multipartFile = null; try{ multipartFile = FileToMultipartFileUtils.getMultipartFile("application/pdf", filePath); }catch (Exception e){ e.printStackTrace(); log.error("文件转MultipartFile:err:{}", e.getMessage()); return false; } List mailMealOrders = new ArrayList<>(); MailMealOrder mailMealOrder = new MailMealOrder(); mailMealOrder.setFlightNo("JR1111"); mailMealOrder.setFrom("天津"); mailMealOrder.setTo("淮安"); mailMealOrder.setFlightDate("2022-01-22"); mailMealOrder.setDepartureTime("08:00:00"); List mealMealInfos = new ArrayList<>(); MealMealInfo mealMealInfo = new MealMealInfo(); mealMealInfo.setName("香菇滑鸡"); mealMealInfo.setCount(10); mealMealInfos.add(mealMealInfo); mailMealOrder.setMealList(mealMealInfos); mailMealOrders.add(mailMealOrder); Map itemParams = new HashMap<>(); itemParams.put("companyName", ""); String[] TO_MAILS = {"muyang@variflight.com"}; itemParams.put("to", TO_MAILS); itemParams.put("cc", TO_MAILS); itemParams.put("type", 1); itemParams.put("orderList", mailMealOrders); String param= JSON.toJSONString(itemParams); Map resultMap = new HashMap (); CloseableHttpClient httpClient = HttpClients.createDefault(); String result = ""; try { HttpPost httpPost = new HttpPost(mailService + "/variflight/sendMail/summarize"); MultipartEntityBuilder builder = MultipartEntityBuilder.create(); // 文件传输http请求头(multipart/form-data) builder.addBinaryBody("file", multipartFile.getInputStream(), ContentType.MULTIPART_FORM_DATA, multipartFile.getOriginalFilename());// 文件流 // 字节传输http请求头(application/json) builder.addTextBody("summarize", param, ContentType.APPLICATION_JSON);//字节流 HttpEntity entity = builder.build(); httpPost.setEntity(entity); HttpResponse response = httpClient.execute(httpPost); // 执行提交 HttpEntity responseEntity = response.getEntity(); if (responseEntity != null) { // 将响应内容转换为字符串 result = EntityUtils.toString(responseEntity, Charset.forName("UTF-8")); } JSONObject jsonObj = JSONObject.parseObject(result); if ( jsonObj.getString("code").equals("0") ){ return true; }else{ return false; } } catch (Exception e) { e.printStackTrace(); log.error("调用发送邮件接口出错: message:{}", e.getMessage()); }finally { try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } return false; }