Apache HttpClient making multipart form post

后端 未结 3 846
暖寄归人
暖寄归人 2020-11-27 11:39

I\'m pretty green to HttpClient and I\'m finding the lack of (and or blatantly incorrect) documentation extremely frustrating. I\'m trying to implement the following post (

相关标签:
3条回答
  • 2020-11-27 12:04

    MultipartEntity now shows up as deprecated. I am using apache httpclient 4.3.3 - does anyone know what we are supposed to use instead? I find the google searches to be so full of MultipartEntity examples I can't find anything. – vextorspace Mar 31 '14 at 20:36

    Here is the sample code in HttpClient 4.3.x

    http://hc.apache.org/httpcomponents-client-4.3.x/httpmime/examples/org/apache/http/examples/entity/mime/ClientMultipartFormPost.java

    import org.apache.http.entity.mime.MultipartEntityBuilder;
    
    HttpPost httppost = new HttpPost("http://localhost:8080" +
            "/servlets-examples/servlet/RequestInfoExample");
    
    FileBody bin = new FileBody(new File(args[0]));
    StringBody comment = new StringBody("A binary file of some kind", ContentType.TEXT_PLAIN);
    
    HttpEntity reqEntity = MultipartEntityBuilder.create()
            .addPart("bin", bin)
            .addPart("comment", comment)
            .build();
    
    
    httppost.setEntity(reqEntity);
    

    To use the class MultipartEntityBuilder, you need httpmime, which is a sub project of HttpClient

    HttpClient 4.3.x:

    http://hc.apache.org/httpcomponents-client-4.3.x/index.html

    httpmime 4.3.x:

    http://hc.apache.org/httpcomponents-client-4.3.x/httpmime/dependency-info.html

    0 讨论(0)
  • 2020-11-27 12:14

    if use org.apache.commons.httpclient.HttpClient package, maybe that can help you!

        HttpConnectionManager httpConnectionManager = new MultiThreadedHttpConnectionManager();
        //here should set HttpConnectionManagerParams but not important for you
        HttpClient httpClient = new HttpClient(httpConnectionManager);
    
        PostMethod postMethod = new PostMethod("http://localhost/media");
    
        FilePart filePart = new FilePart("file", new File(filepath));
        StringPart typePart = new StringPart("type", fileContent.getType(), "utf-8");
        StringPart fileNamePart = new StringPart("fileName", fileContent.getFileName(), "utf-8");
        StringPart timestampPart = new StringPart("timestamp", ""+fileContent.getTimestamp(),"utf-8");
        Part[] parts = { typePart, fileNamePart, timestampPart, filePart };
    
        MultipartRequestEntity multipartRequestEntity = new MultipartRequestEntity(parts, postMethod.getParams());
        postMethod.setRequestEntity(multipartRequestEntity);
        httpClient.executeMethod(postMethod);
        String responseStr = postMethod.getResponseBodyAsString();
    
    0 讨论(0)
  • 2020-11-27 12:18

    Use MultipartEntityBuilder from the HttpMime library to perform the request you want.

    In my project I do that this way:

    HttpEntity entity = MultipartEntityBuilder
        .create()
        .addTextBody("number", "5555555555")
        .addTextBody("clip", "rickroll")
        .addBinaryBody("upload_file", new File(filePath), ContentType.create("application/octet-stream"), "filename")
        .addTextBody("tos", "agree")
        .build();
    
    HttpPost httpPost = new HttpPost("http://some-web-site");
    httpPost.setEntity(entity);
    HttpResponse response = httpClient.execute(httpPost);
    HttpEntity result = response.getEntity();
    

    Hope this will help.

    (Updated this post to use MultipartEntityBuilder instead of deprecated MultipartEntity, using @mtomy code as the example)

    0 讨论(0)
提交回复
热议问题