【发布时间】:2020-04-02 15:58:20
【问题描述】:
我有一个返回byte[] 的网络服务方法,所以我这样做是为了强制下载返回的文件
final byte[] content = axisService.getWebFileContent(pieceJointe.getVlidnlfy());
if (content != null) {
final Map<String, Object> lrFile = new HashMap<>(2);
lrFile.put("CONTENT", content);
lrFile.put("MIMETYPE", "application/octet-stream");
response.reset();
response.resetBuffer();
response.setContentType("application/force-download");
response.setHeader("Content-Transfer-Encoding", "binary");
response.setHeader("Content-Disposition",
"attachment; filename=\"" + pieceJointe.getLbnompcj() + "\"");// fileName);
response.getOutputStream().write((byte[]) lrFile.get("CONTENT"));
response.setContentLength(((byte[]) lrFile.get("CONTENT")).length);
response.getOutputStream().close();
response.flushBuffer();
}
但它不起作用,我在控制台上看不到任何错误。我需要向我的响应对象添加额外的配置吗?
【问题讨论】:
-
但它不起作用,我的控制台中没有任何错误 — 错误是什么,代码应该如何工作?您能否编辑您的问题并添加更多信息?
-
您好,此代码用于强制将文件下载到我的浏览器中,但执行此代码后没有任何反应
-
排除初学者最常犯的错误:你是用ajax点击“web服务”吗?
-
是的,我正在使用 ajax 来调用我的方法
-
好的,你的 servlet 没有问题。问题是因为您使用的是 ajax 而不是简单的
window.location=servletUrl。下次对您的 servlet 进行单元测试(不使用 ajax)。您应该已经注意到您的代码实际上工作得很好。有关一些解决方案/替代方案,请参阅上面链接的副本。
标签: java servlets outputstream