2011-10-10 32 views
5

Co to jest równoważne w Javie za pomocą następującego polecenia curl:"Curl -F" Java równoważne

curl -X POST -F "[email protected]$File_PATH" 

Żądanie Chcę wykonać przy użyciu Java:

curl -X POST -F '[email protected]_path' http://localhost/files/ 

Starałem:

  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(); 
+0

Jaki jest dokładnie Twój problem? I trochę kodu mroe byłoby pomocne, co jest np. "HttpPost"? –

+0

Próbuję wysłać polecenie curl (już polecenie terminalu systemu Linux) za pomocą programu java. Próbowałem już wielu kart, ale nie muszę przesyłać ani pobierać plików, jest to raczej transfer pomiędzy odległym repozytorium. – amine

+0

Cóż, twój kod Java jest niekompletny. I nie wiemy, dlaczego to nie działa. Napisz więc więcej kodu (i tak, wszyscy wiemy, czym jest 'curl' ... westchnienie). Na przykład. nie wywołujecie żadnej metody post, więc powyższy fragment nie może oczywiście działać. Potrzebujesz co najmniej połączenia HttpURLConnection ... –

Odpowiedz

1

Wczoraj przebiegłem ten problem. Oto rozwiązanie, które wykorzystuje biblioteki http Apache.

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())); 
    } 
} 

W razie potrzeby ustaw filePath i URL. Jeśli używasz czegoś innego niż plik, możesz zastąpić FileBody ByteArrayBody, InputStreamBody lub StringBody. Moja szczególna sytuacja wymagała ByteArrayBody, ale powyższy kod działa dla pliku.