2015-03-19 18 views
5

Po raz pierwszy wysyłam zgłoszenia wieloczęściowe, a po kopaniu tutaj, jeszcze bardziej się pogubiłem, więc każda pomoc dotycząca "poprawnego" sposobu będzie bardzo przydatna.Jak wysłać żądanie POST wieloczęściowe za pomocą HttpURLConnection w java?

Mam funkcję, która powinna uzyskać: ścieżkę do pliku i reprezentację łańcuchową JSON i wysłać żądanie POST do serwera przy użyciu wieloczęściowego.

Nie jestem pewien, kiedy użyć typ boundary i "multipart/form-data" treści, a różnica między addPart i addTextBody i kiedy (lub dlaczego) jest zawsze napisany Content-Disposition: form-data; name=\

public String foo(String filePath, String jsonRep, Proxy proxy) 
{ 
    File f = new File(filePath); 
    HttpURLConnection connection; 
    connection = (HttpURLConnection) url.openConnection(proxy); 
    connection.setRequestProperty("Content-Type", "multipart/form-data"); // How should I generate boundary? Should it be added here? 

    if (myMethod == "POST") 
    { 
     connection.getOutputStream().write(? Both the json string and the file bytes??); 
     } 


.... checking there is no error code etc.. 

return ReadResponse(connection) // read input stream.. 

Teraz nie jestem pewności, jak dalej, i jak napisać plik i ciąg json widziałem ten kod:

MultipartEntityBuilder builder = MultipartEntityBuilder.create(); 
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); 
builder.addPart("upfile", fileBody); 
builder.addPart("text1", stringBody1); 
builder.addPart("text2", stringBody2); 

Ale ja nie potrafię zrozumieć, jak to jest podłączony do mojego connection.

Czy możesz pomóc?

+0

To exacly mój problem. Nie mogę znaleźć wiele informacji na temat korzystania z MultipartEntityBuilder i HttpURLConnection. –

Odpowiedz

1

Próbka formularz HTML:

<form method="post" action="http://127.0.0.1/app" enctype="multipart/form-data"> 
<input type="text" name="foo" value="bar"><br> 
<input type="file" name="bin"><br> 
<input type="submit" value="test"> 
</form> 

kod Java dla wysłaniem formularza wieloczęściowy:

MultipartEntityBuilder mb = MultipartEntityBuilder.create();//org.apache.http.entity.mime 
    mb.addTextBody("foo", "bar"); 
    mb.addBinaryBody("bin", new File("testFilePath")); 
    org.apache.http.HttpEntity e = mb.build(); 

    URLConnection conn = new URL("http://127.0.0.1:8080/app").openConnection(); 
    conn.setDoOutput(true); 
    conn.addRequestProperty(e.getContentType().getName(), e.getContentType().getValue());//header "Content-Type"... 
    conn.addRequestProperty("Content-Length", String.valueOf(e.getContentLength())); 
    OutputStream fout = conn.getOutputStream(); 
    e.writeTo(fout);//write multi part data... 
    fout.close(); 
    conn.getInputStream().close();//output of remote url 
Powiązane problemy