Java Jersey servlet返回的zip文件包含的字节比发送的响应多
我试图实现一个简单的servlet,它返回捆绑在应用程序内部的zip文件(简单资源) 因此,我在服务器端实现了以下方法:Java Jersey servlet返回的zip文件包含的字节比发送的响应多,java,servlets,jersey,zip,servlet-container,Java,Servlets,Jersey,Zip,Servlet Container,我试图实现一个简单的servlet,它返回捆绑在应用程序内部的zip文件(简单资源) 因此,我在服务器端实现了以下方法: @GET @Path("{path}/{zipfile}") @Produces("application/zip") public Response getZipFile( @PathParam("path") String pathFolder, @PathParam("zipfile") String zipFile) IOExcepti
@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();
}
当我从borwser调用此方法时,将下载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
的最终响应之间,在文件上写入了一些额外的字节/进行了一些编码
你能帮忙吗
致以最良好的祝愿,
Maxim当您使用ajax请求时,浏览器期望文本(默认情况下),并将尝试从UTF-8对其进行解码(破坏您的数据)。 尝试使用
oXHR.responseType=“arraybuffer”代码>:这样,浏览器将不会更改数据并提供原始内容(将在oXHR.response
中)
此解决方案在IE 6-9中不起作用:如果需要支持,请查看JSZip文档:
如果这不是正确的解决方案,请尝试直接下载zip文件(不涉及任何js代码),以检查问题是来自js方面还是来自java方面