2016-09-30 1 views
0

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); 
} 
+0

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

+0

Um Antworten zu erhalten, sollten Sie uns mitteilen, welchen Server Sie verwenden. – slim

+0

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

Antwort

0

Ich löste schließlich das indem Sie die folgende Eigenschaft für die Clientkonfiguration von setChunkedStreamingMode(4096); infestlegen:

.property(ClientProperties.REQUEST_ENTITY_PROCESSING, "CHUNKED"); 
Verwandte Themen