Ich versuche, eine Datei von meinem Server herunterzuladen. Mein Problem ist, dass, wenn ich chunkedStreamingMode
verwende, der Server mir einen 405 - Method not Allowed
Fehler zurückgibt. Wenn ich den chunkedStreamingMode
nicht setze funktioniert der Download einwandfrei.405 Fehler mit setChunkedStreamingMode()
Ich verstehe nicht, warum der Dateidownload mit chunkedStreamingMode
aktiviert wird, wird von meinem Server abgelehnt. Was mache ich hier falsch? Oder muss ich etwas auf dem Server setzen, damit chunkedStreamingMode
funktioniert?
Auf meinem Server Ich habe:
@GET
@Path("/{fileId}")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response downloadFile(@PathParam("fileId") long fileId, @Context HttpServletRequest req,
@Context HttpServletResponse response) throws IOException {
..
}
Auf dem Client ich benutze:
WebTarget target = rootTarget.path(uri);
Invocation.Builder builder = target.request(MediaType.APPLICATION_OCTET_STREAM_TYPE);
response = builder.get();
Ich benutze das folgende HttpUrlConnectorProvider auf meinem Klienten:
private static HttpUrlConnectorProvider buildHttpUrlConnectorProvider(){
HttpUrlConnectorProvider.ConnectionFactory factory = new HttpUrlConnectorProvider.ConnectionFactory() {
@Override
public HttpURLConnection getConnection(URL url) throws IOException {
HttpURLConnection result = (HttpURLConnection) url.openConnection();
result.setChunkedStreamingMode(4096);
result.setDoOutput(true);
return result;
}
};
return new HttpUrlConnectorProvider().connectionFactory(factory);
}
Sie könnten dies wahrscheinlich ziemlich schnell diagnostizieren, indem Sie Ihren Server in einem Debugger ausführen und seinen Anforderungshandler durchlaufen. Sie werden den Ort finden, an dem die 405 ausgelöst wird. Möglicherweise wird sie von einem konfigurationsgesteuerten Wächter umgeben sein. – slim
Um Antworten zu erhalten, sollten Sie uns mitteilen, welchen Server Sie verwenden. – slim
Auch habe ich gefunden, dass eine gute Faustregel ist, 'HTTPUrlConnection' zu vermeiden - es ist voll von gotchas. Die Verwendung von Apache HttpClient spart eine Menge Kopfschmerzen (ist aber nicht unbedingt das Problem). – slim