Hi, wir schreiben gerade eine android app und ich soll den Upload von Dateien übernehmen. Ich hab soweit eigentlich alles ganz gut hinbekommen, nur gibt es ein ernstes Problem, das ich nicht in den Griff bekomme.
Also, ich sende ein einfaches Post-Request mit "http://server
ort/Files/upload" an den Server. diese Anfrage klappt hervorragend. Aber wenn ich die URL auch nur im kleinsten verändere wie bspw. "http://server
ort/Files/uploaded" dann löst der Server den Post-Body nicht mehr auf und findet die hochgeladene Datei nicht... ich kann mir das nicht erklären.
Ich zeige hier mal den Beispielcode, den ich dafür verwendet habe.
ich nuze für das ganze folgende Abhängigkeiten:
[XML]
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.3.2</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.3.2</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.3.2</version>
</dependency>
[/XML]
Client
Server
Hier zeige ich eben nur das Servlet, das sollte reichen.
Wenn ich die Anfrage an den Server mit "/Files/upload" sende, bekomme ich folgende Ausgabe
******************************************
[file.org.eclipse.jetty.servlet.contentType, file]
******************************************
Wenn ich die Anfrage an den Server mit "/Files/uploaded" sende (oder auch irgendwas beliebiges anderes), bekomme ich folgende Ausgabe
******************************************
[]
******************************************
kann mir das vielleicht jemand erklären? ich hab echt keine Ahnung mehr, was ich noch machen kann...
Also, ich sende ein einfaches Post-Request mit "http://server
Ich zeige hier mal den Beispielcode, den ich dafür verwendet habe.
ich nuze für das ganze folgende Abhängigkeiten:
[XML]
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.3.2</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.3.2</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.3.2</version>
</dependency>
[/XML]
Client
Java:
public static void main( String[] args ) throws URISyntaxException, IOException, HttpException {
String uploadURL = "/Files/upload";
File uploadFile = new File("C:\\Users\\Pascal\\Dropbox\\Bilder\\lulz\\00030dxt.jpg");
HttpUploadClient httpUploadClient = new HttpUploadClient();
httpUploadClient.uploadFile( uploadURL, uploadFile );
}
private static final String UTF_8_ENCODING = "UTF-8";
private static final int connectionTimeoutMillis = 20000;
private static final int socketTimeoutMillis = 20000;
private void uploadFile(String uploadURL, File uploadFile) throws IOException, HttpException, URISyntaxException {
MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
multipartEntityBuilder.setMode( HttpMultipartMode.BROWSER_COMPATIBLE );
multipartEntityBuilder.addPart( "file", new FileBody( uploadFile ) );
// MultipartEntity multipartEntity = new MultipartEntity( );
// multipartEntity.addPart( "file", new FileBody( uploadFile ) );
HttpResponse response;
response = sendPOST( uploadURL, multipartEntityBuilder.build() );
// TODO remove sysout line when it is not needed anymore
System.out.println("result: " + EntityUtils.toString(response.getEntity(), UTF_8_ENCODING));
return;
}
public static HttpResponse sendPOST(String targetURL, HttpEntity entity) throws IOException, URISyntaxException, HttpException {
HttpClient httpClient = getHttpClient();
HttpHost target = new HttpHost("localhost", 8888, "http");
HttpHost proxy = new HttpHost("localhost", 8900, "http"); // für visual proxy um die Anfrage anzsuehen
RequestConfig config = RequestConfig.custom()
.setProxy(proxy)
.build();
HttpPost httppost = new HttpPost( targetURL );
httppost.setConfig( config );
httppost.setEntity( entity );
System.out.println( "Executing request " + httppost.getRequestLine() + " to " + target + " via " + proxy );
HttpResponse response = httpClient.execute(target, httppost);
// HttpParams httpParams = httpClient.getParams();
// HttpConnectionParams.setConnectionTimeout( httpParams, connectionTimeoutMillis );
// HttpConnectionParams.setSoTimeout(httpParams, socketTimeoutMillis);
String result = "";
if (response != null && response.getEntity() != null) {
result = EntityUtils.toString( response.getEntity(), UTF_8_ENCODING );
}
System.out.println(result);
return response;
}
private static Object mLock = new Object();
public static CookieStore mCookie = null;
public static HttpClient getHttpClient() {
final CloseableHttpClient httpClient = HttpClients.createDefault();
return httpClient;
}
Server
Hier zeige ich eben nur das Servlet, das sollte reichen.
Java:
@SuppressWarnings("serial")
public class DispatchServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request,
HttpServletResponse response) throws IOException {
System.out.println("******************************************");
System.out.println(request.getParameterMap().keySet());
System.out.println("******************************************");
}
}
Wenn ich die Anfrage an den Server mit "/Files/upload" sende, bekomme ich folgende Ausgabe
******************************************
[file.org.eclipse.jetty.servlet.contentType, file]
******************************************
Wenn ich die Anfrage an den Server mit "/Files/uploaded" sende (oder auch irgendwas beliebiges anderes), bekomme ich folgende Ausgabe
******************************************
[]
******************************************
kann mir das vielleicht jemand erklären? ich hab echt keine Ahnung mehr, was ich noch machen kann...