Przeglądaj źródła

update
中煤财险
1.上传影像问题

wks 1 rok temu
rodzic
commit
baafbe4a10

+ 15 - 16
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/component/ZmCrawlerRequestComponent.java

@@ -29,6 +29,7 @@ import org.redisson.api.RMap;
 import org.redisson.api.RedissonClient;
 import org.springframework.http.*;
 import org.springframework.http.MediaType;
+import org.springframework.http.client.MultipartBodyBuilder;
 import org.springframework.stereotype.Component;
 import org.springframework.util.LinkedMultiValueMap;
 import org.springframework.util.MultiValueMap;
@@ -313,20 +314,19 @@ public class ZmCrawlerRequestComponent {
      */
     public ZmCrawlerImageImportResponse importImage(ZmCrawlerImageImportRequest importRequest, List<InsuranceImageVo.ImageDTO> imageDTOS, List<String> cookies) {
 
-        JSONObject imageMap = new JSONObject();
         String base64Str = "data:image/jpeg;base64," + imageDTOS.get(0).getImageBase64Str();
-        imageMap.put("base64", base64Str);
-        imageMap.put("size", imageDTOS.get(0).getImageSize());
-        imageMap.put("orginalName", imageDTOS.get(0).getImageName());
-        imageMap.put("exif", "");
-
-        MultiValueMap<String, Object> formData = new LinkedMultiValueMap<>();
-        formData.add("busiNo", importRequest.getBusiNo());
-        formData.add("appCode", importRequest.getAppCode());
-        formData.add("batchId", importRequest.getBatchId());
-        formData.add("batchVer", importRequest.getBatchVer());
-        formData.add("image0", imageMap.toJSONString());
-        formData.add("docCode", "UW_0302");
+        final String EXIF_ESCAPED_STRING = "%7B'Create%20SoftWare%7C%E5%88%9B%E5%BB%BA%E8%BD%AF%E4%BB%B6':'undefined','Camera%20model%7C%E7%9B%B8%E6%9C%BA%E5%9E%8B%E5%8F%B7':'undefined','CaptureTime%7C%E6%8B%8D%E6%91%84%E6%97%B6%E9%97%B4':'undefined','Width%20x%20Height%7C%E9%95%BF%20x%20%E5%AE%BD':'undefined%20x%20undefined','Latitude%7C%E7%BA%AC%E5%BA%A6':'undefined%20undefined','Longitude%7C%E7%BB%8F%E5%BA%A6':'undefined%20undefined','Altitude%7C%E9%AB%98%E5%BA%A6':'undefined','DocClass%7C':''%7D";
+        String image0Json = String.format(
+                "{\"base64\":\"%s\",\"size\":\"%d\",\"orginalName\":\"%s\",\"exif\":\"%s\"}",
+                base64Str, base64Str.length(), imageDTOS.get(0).getImageName(), EXIF_ESCAPED_STRING
+        );
+        MultipartBodyBuilder builder = new MultipartBodyBuilder();
+        builder.part("batchId", importRequest.getBatchId(), MediaType.MULTIPART_FORM_DATA);
+        builder.part("batchVer", importRequest.getBatchVer(), MediaType.MULTIPART_FORM_DATA);
+        builder.part("appCode", importRequest.getAppCode(), MediaType.MULTIPART_FORM_DATA);
+        builder.part("busiNo", importRequest.getBusiNo(), MediaType.MULTIPART_FORM_DATA);
+        builder.part("docCode", "UW_0302", MediaType.MULTIPART_FORM_DATA);
+        builder.part("image0", image0Json, MediaType.MULTIPART_FORM_DATA);
 
         // 构建 WebClient 实例
         WebClient webClient = WebClient.builder()
@@ -335,12 +335,11 @@ public class ZmCrawlerRequestComponent {
                 .defaultHeader(HttpHeaders.USER_AGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36")
                 .defaultHeader(HttpHeaders.REFERER, "https://image.chinacoal-ins.com/SunICMS/ecm-nview/image/webScan/webScanMain.jsp")
                 .build();
-        System.out.println(JSON.toJSONString(formData));
         // 发送 POST 请求
         String result  = webClient.post()
                 .uri("/SunICMS/image/upload.action")
                 .contentType(MediaType.MULTIPART_FORM_DATA)
-                .body(BodyInserters.fromMultipartData(formData))
+                .body(BodyInserters.fromMultipartData(builder.build()))
 //                .retrieve()
                 .exchangeToMono(response -> {
                     HttpStatusCode status = response.statusCode();
@@ -942,7 +941,7 @@ public class ZmCrawlerRequestComponent {
         InputStream responseStream = httpConn.getResponseCode() / 100 == 2
                 ? httpConn.getInputStream()
                 : httpConn.getErrorStream();
-        Scanner s = new Scanner(responseStream).useDelimiter("\\A");
+        Scanner s = new Scanner(responseStream).useDelimiter("A");
         String response = s.hasNext() ? s.next() : "";
         System.out.println(response);
     }