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; }