0
我目前使用的是Jersey 2.13。我希望客戶端從服務器下載zip文件,並且我希望服務器在下載完成後刪除文件。因此,我嘗試了AsyncResponse,所以我可以註冊一個CompletionCallback來知道下載完成。對於我當前的代碼,客戶端得到:「失敗:HTTP錯誤代碼:415」。Jersey壓縮文件的異步下載
服務器代碼:
@GET
@Path("/{id}")
@Produces({"application/zip"})
public void getResourceTree(@Suspended final AsyncResponse asyncResponse, @PathParam("id") String id) throws IOException{
asyncResponse.register(new CompletionCallback() {
@Override
public void onComplete(Throwable throwable) {
if (throwable == null) {
// no throwable - the processing ended successfully
// (response already written to the client)
// Delete temporary zip file...
} else {
throw new UnexpectedException("The user did not receive the zip file in path:"+ getResourceTreeZipName(id) +" successfully");
}
}
});
new Thread(new Runnable() {
@Override
public void run() {
File file = createZipFile(id);
asyncResponse.resume(Response.ok((Object) file).build());
}
}).start();
}
的客戶端代碼:
private File downloadZipFile(String resourceId){
Client client = Client.create();
WebResource serverWebResource = client.resource(serverURI+"/"+resourceId);
ClientResponse response = serverWebResource.accept("application/zip").get(ClientResponse.class);
InputStream in = response.getEntityInputStream();
//Create and return the zip file from the input stream...
}
我在做什麼錯?
它是如何使用異步與[澤西島1.9](https://jersey.java.net/nonav/documentation/1.9/user-guide.html) – 2014-11-04 13:43:06
你是對的,顯然我使用澤西島2.13 – 2014-11-04 13:54:58
但是您使用的舊版客戶端API在2.13中不可用。這怎麼可能?他們是兩個不同的應用程序無論如何,我無法重現這個問題,儘管我使用的是新的客戶端API。不知道這是否有所作爲。 – 2014-11-04 14:00:55