HTTP Apache HTTP Client: Request mit angehängter Datei

rumpel84

Mitglied
Hallo,

ich habe ein Java Servlet, das per HttpClient request einen Service abruft. Dieser schickt eine Antwort mit einer angehängten Excel Datei. Diese möchte ich nun aus der Antwort des HttpClient auslesen und an das HttpServletResponse Objekt hängen. Das klappt leider nicht, daher die Frage, was mache ich falsch?

Apache HttpClient 4

Java:
private void requestMyService(HttpServletRequest request, HttpServletResponse response) {
...
HttpPost post = new HttpPost(url.toString());
HttpResponse hr = client.execute(post);
HttpEntity ent = hr.getEntity();

response.setHeader(ent.getContentType().getName(), ent.getContentType().getValue());
response.setHeader("Content-Disposition", hr.getHeaders("Content-Disposition")[0].getValue());
// response.getOutputStream().write(EntityUtils.toByteArray(ent));
ent.writeTo(response.getOutputStream());
}

Eine herkömmliche Anfrage ohne angehängte Datei sieht so aus: (funktioniert auch)
Java:
private void requestMyService(HttpServletRequest request, HttpServletResponse response) {
...
HttpPost post = new HttpPost(url.toString());
HttpResponse hr = client.execute(post);
HttpEntity ent = hr.getEntity();

String res = EntityUtils.toString(ent);
response.setHeader(ent.getContentType().getName(), ent.getContentType().getValue());
response.setCharacterEncoding("UTF-8");
response.getWriter().write(res);
}

Danke im Voraus
 
so in etwa habe ich mir das vorgestellt, nur mit der Änderung:

Java:
...
//HttpEntity ent
response.setContentLength((int) ent.getContentLength());
buf = new BufferedInputStream(ent.getContent());

Klappt aber leider noch nicht. Es kommt zwar ein Bytestream an, es wird aber nicht der Öffnen/Speichern Dialog angeboten.
Der Header sieht so aus:

Server Apache-Coyote/1.1
Content-Disposition attachment; filename="WDP.xls"
Content-Type application/vnd.ms-excel
Transfer-Encoding chunked
Date Tue, 15 Feb 2011 07:05:24 GMT

Mich wundert, dass Content-Length nicht gesetzt ist.
 

Neue Themen


Zurück
Oben