MultipartEntityBuilder发送文件

本文档介绍了如何在Java中使用MultipartEntityBuilder进行文件上传操作,包括控制器接收文件、MultipartFile转化为File的步骤,并提到了在HttpClient中转上传文件时可能遇到的问题及解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pom:

           <!--    httpclient        -->
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
                <version>4.4</version>
            </dependency>
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpmime</artifactId>
                <version>4.4</version>
            </dependency>

1、controller接收文件:

    public Result<?> validateResult(@RequestParam("file") MultipartFile megLiveData) {
}

2、MultipartFile转换为File

try{
       		File file = null;
            //将MultipartFile转换为File
            file = new File(megLiveData.getOriginalFilename());
            FileUtils.copyInputStreamToFile(megLiveData.getInputStream(), file);
}catch(Exception e){
            throw new RuntimeException();
}
finally {
            //这种方法会产生临时文件,用完后需要删除
            if (file.exists()) {
                file.delete();
            }
        }

3、

@Override
    public FaceVerifyResultDTO forFaceVerifyResult(FaceVerifyDTO faceVerifyDTO) {
        
        HashMap<String, Object> map = new HashMap<>();
        map.put("key_1","value_1");
        map.put("key_2","value_2");
        map.put("key_3","value_3");
        map.put("meglive_data",faceVerifyDTO.getMeglive_data());
        FaceVerifyResultDTO result = null;
        try {
            String resp = sendFile(map);
            result = JSON.parseObject(resp, new TypeReference<FaceVerifyResultDTO>() {});
            log.info(" result : {} ", JSON.toJSONString(result));
        } catch (Exception e) {
            log.warn(" FaceVerifyResultDTO : {} url: {}", JSON.toJSONString(faceVerifyDTO), FOR_FACE_VERIFY_RESULT_URL);
          
        }

        if (result == null) {
            log.warn(" FaceVerifyResultDTO : {} url: {}", JSON.toJSONString(faceVerifyDTO), FOR_FACE_VERIFY_RESULT_URL);
           
        }
        return result;
    }


    public static final String MEDIA_TYPE_MULTIPART = "multipart/form-data;charset=utf-8";
    public static final String MEDIA_TYPE_TEXT = "text/plain;charset=utf-8";
    /**
     * 发送文件消息
     * @param map
     * @return
     */
    private String sendFile(Map<String, Object> map) {
        String boundary = UUID.randomUUID().toString().replace("-", "");

        CloseableHttpClient httpClient = HttpClients.createDefault();
        String result = "";

        try {
            HttpPost httpPost = new HttpPost("url");
            MultipartEntityBuilder builder =MultipartEntityBuilder.create();

            builder.setBoundary(boundary);
            for (Map.Entry<String, Object> entry : map.entrySet()) {
                Object value = entry.getValue();
                if (value instanceof File) {
                    File file = (File) value;
                    builder.addBinaryBody(entry.getKey(), file, ContentType.parse(MEDIA_TYPE_MULTIPART), entry.getKey());

                } else if (value instanceof byte[]) {
                    byte[] data = (byte[]) value;
                    builder.addBinaryBody(entry.getKey(), data, ContentType.parse(MEDIA_TYPE_MULTIPART), entry.getKey());

                } else if (value instanceof InputStream) {
                    builder.addBinaryBody(entry.getKey(), (InputStream) value, ContentType.parse(MEDIA_TYPE_MULTIPART), entry.getKey());

                } else {
                    builder.addTextBody(entry.getKey(), value.toString(),ContentType.parse(MEDIA_TYPE_TEXT));
                }

            }
            httpPost.setEntity(builder.build());

            HttpResponse response = httpClient.execute(httpPost);// 执行提交
            HttpEntity responseEntity = response.getEntity();
            if (responseEntity != null) {
                // 将响应内容转换为字符串
                result = EntityUtils.toString(responseEntity, Charset.forName("UTF-8"));
            }

        } catch (Exception e) {
            log.warn("forFaceVerifyResult FaceVerifyResultDTO : {} url: {}", JSON.toJSONString(result), FOR_FACE_VERIFY_RESULT_URL);
            

        } finally {
            try {
                httpClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return result;
    }

参考文档:
apache的MultipartEntityBuilder文件上传

Java中 HttpClient中转上传文件遇到的坑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值