java - 如何使用 Apache HttpPost 上传文件

标签 java curl apache-httpclient-4.x

我有一个像这样的 curl 调用:

curl -i -X POST -H "Content-Type: multipart/form-data" -F "file=@data_test/json_test.json" http://domain.com/api/upload_json/

我需要做的就是为这个调用编写一个 Java 实现。我已经编写了这段代码,但是在服务器上显示的文件似乎为空。

public static void uploadJson(String url, File jsonFile) {
    try {
        HttpPost request = new HttpPost(url);
        EntityBuilder builder = EntityBuilder
                .create()
                .setFile(jsonFile)
                .setContentType(ContentType
                        .MULTIPART_FORM_DATA)
                .chunked();
        HttpEntity entity = builder.build();
        request.setEntity(entity);
        HttpResponse response = getHttpClient().execute(request);
        logger.info("Response: {}", response.toString());
    } catch (IOException e) {
        logger.error(e.getMessage());
    }
}

构建此请求的正确方法是什么?

最佳答案

CloseableHttpClient httpClient = HttpClientBuilder.create()
        .build();

HttpEntity requestEntity = MultipartEntityBuilder.create()
        .addBinaryBody("file", new File("data_test/json_test.json"))
        .build();
HttpPost post = new HttpPost("http://domain.com/api/upload_json/");
post.setEntity(requestEntity);
try (CloseableHttpResponse response = httpClient.execute(post)) {
    System.out.print(response.getStatusLine());
    EntityUtils.consume(response.getEntity());
}

关于java - 如何使用 Apache HttpPost 上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35228317/

相关文章:

python - 非交互式访问谷歌云存储

java - 为什么 HTTP 客户端需要 InputStream? ( java )

java - 为什么 Apache CloseableHttpResponse 在关闭时不使用实体?

在浏览器中显示 Java 源代码?

linux - curl tlsv1.2 选项不起作用

java - 多次尝试后,R无法解析为变量

PHP:curl 和流转发

java - 在 RequestConfig 和 SocketConfig 中设置套接字超时对于 HTTP 和 HTTPS 的工作方式不同

java - NT登录模块 : Where does it retrieve user information?

java - 抽象泛型类的不同实现