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<ExportMealSummaryBO> summaryBOS = orderMealSummaryService.adminExportTask(queryDTO);
if(summaryBOS==null || summaryBOS.size() < 1){
log.error("餐食订单汇总表-数据统计 is empty.");
return;
}
List<ExportMealOrderSummaryBO> 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, List<ExportMealSummaryBO> summaryBOS){
MultipartFile multipartFile = null;
try{
multipartFile = FileToMultipartFileUtils.getMultipartFile("application/pdf", filePath);
}catch (Exception e){
e.printStackTrace();
log.error("文件转MultipartFile:err:{}", e.getMessage());
return false;
}
List<MailMealOrder> 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<MealMealInfo> mealMealInfos = new ArrayList<>();
MealMealInfo mealMealInfo = new MealMealInfo();
mealMealInfo.setName("香菇滑鸡");
mealMealInfo.setCount(10);
mealMealInfos.add(mealMealInfo);
mailMealOrder.setMealList(mealMealInfos);
mailMealOrders.add(mailMealOrder);
Map<String, Object> 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<String, String> resultMap = new HashMap<String, String>();
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;
}
浙公网安备 33010602011771号