Java-эквивалент "Curl -F" - PullRequest
       4

Java-эквивалент "Curl -F"

5 голосов
/ 10 октября 2011

Что является эквивалентом в Java для следующей команды curl:

curl -X POST -F "file=@$File_PATH"

Запрос, который я хочу выполнить с помощью Java:

curl -X POST -F 'file=@file_path' http://localhost/files/ 

Я пытался:

            HttpClient httpClient = new DefaultHttpClient();        

    HttpPost httpPost = new HttpPost(_URL);

    File file = new File(PATH);

            MultipartEntity mpEntity = new MultipartEntity();
        ContentBody cbFile = new FileBody(file, "bin");
        mpEntity.addPart("userfile", cbFile);

        httpPost.setEntity(mpEntity);

    HttpResponse response = httpClient.execute(httpPost);
    InputStream instream = response.getEntity().getContent();

1 Ответ

2 голосов
/ 17 января 2014

Я столкнулся с этой проблемой вчера.Вот решение, которое использует библиотеки Apache http.

package curldashf;

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.fluent.Request;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.ByteArrayBody;
import org.apache.http.util.EntityUtils;

public class CurlDashF
{
    public static void main(String[] args) throws ClientProtocolException, IOException
    {
        String filePath = "file_path";
        String url = "http://localhost/files";
        File file = new File(filePath);
        MultipartEntity entity = new MultipartEntity();
        entity.addPart("file", new FileBody(file));
        HttpResponse returnResponse = Request.Post(url)
            .body(entity)
            .execute().returnResponse();
        System.out.println("Response status: " + returnResponse.getStatusLine().getStatusCode());
        System.out.println(EntityUtils.toString(returnResponse.getEntity()));
    }
}

Установите filePath и url при необходимости.Если вы используете что-то отличное от файла, вы можете заменить FileBody на ByteArrayBody, InputStreamBody или StringBody.Моя конкретная ситуация требует ByteArrayBody, но приведенный выше код работает для файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...