我正在尝试实现一个简单的 servlet,它返回一个捆绑在应用程序内部的 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
写入了一些额外的字节/对文件进行了一些编码。
你能帮忙吗?
最好的问候, 马克西姆