アプリケーション内にバンドルされている zip ファイルを返す単純なサーブレットを実装しようとしています (単純なリソース)
そこで、サーバー側で次のメソッドを実装しました。
@GET
@Path("{path}/{zipfile}")
@Produces("application/zip")
public Response getZipFile(
@PathParam("path") String pathFolder,
@PathParam("zipfile") String zipFile) IOException {
String fullPath= String.format("/WEB-INF/repository/%s/%s",
pathFolder, zipFile);
String realPath = ServletContextHolder.INSTANCE.getServletContext()
.getRealPath(fullPath);
File file = new File(realPath );
ResponseBuilder response = Response.ok((Object) file);
return response.build();
}
ブラウザからこのメソッドを呼び出すと、zip ファイルがダウンロードされ、そのサイズはサーバー内の元の zip と同じバイト数になります。
ただし、クライアント側のコードから単純な XMLHttpRequest を使用してこれを呼び出すと、次のようになります。
var oXHR = new XMLHttpRequest();
var sUrl = "http://localhost:8080/path/file.zip"
oXHR.open('GET', sUrl);
oXHR.responseType = 'application/zip';
oXHR.send();
Chrome の開発者ツールの [ネットワーク] タブで、コンテンツのサイズが大きくなり、この zip ファイルを処理できないことがわかります (たとえば、JSzip はそれを認識しません)。
私の応答と からの最終応答の間のどこかにあるようorg.glassfish.jersey.servlet.ServletContainer
です。余分なバイトが書き込まれるか、ファイルにエンコードが行われます。
お手伝いいただけますか?
よろしく、 マキシム