2015-03-19 4 views
5

Es ist das erste Mal, dass ich mehrteilige Anfragen verschicke, und nachdem ich hier gegraben habe, bin ich noch verwirrter geworden, so dass jede Hilfe bezüglich des "richtigen" Weges sehr geschätzt wird.Wie senden Sie eine mehrteilige POST-Anfrage mit HttpURLConnection in Java?

Ich habe eine Funktion, die erhalten sollte: Dateipfad und eine Zeichenfolge Darstellung von JSON und senden POST-Anfrage an den Server mit Multipart.

Ich bin nicht sicher, wenn den boundary und "multipart/form-data" Inhaltstyp zu verwenden, und die Differenz zwischen addPart und addTextBody, und wenn (oder warum) es immer Content-Disposition: form-data; name=\

geschrieben
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.. 

Jetzt bin ich nicht sicher, wie es weitergeht und wie die Datei und den jSON-String zu schreiben habe ich diesen Code:

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

Aber ich kann es nicht zu verstehen scheinen, wie 0 bis mein verbunden.

Können Sie bitte helfen?

+0

Das exacly mein Problem ist. Ich kann nicht viele Informationen über die Verwendung von MultipartEntityBuilder und HttpURLConnection finden. –

Antwort

1

Die Probe HTML-Formular:

<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> 

Java-Code für die mehrteilige Form submiting:

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 
Verwandte Themen