我在尝试下载文件时收到此错误消息:
无法处理异常!:java.lang.IllegalStateException:UT010006:无法调用getWriter(),getOutputStream()已经调用。
文件已下载但没有扩展名。所以浏览器问我应该用什么程序来阅读它。
这是我的下载代码:
InputStream fileIs = null;
OutputStream output = null;
try {
ExternalContext externalContext = getContext().getExternalContext();
externalContext.responseReset();
externalContext.setResponseContentType(fileToDownload.getMetadata().getMimeType());
externalContext.setResponseContentLength(fileToDownload.getMetadata().getTaille().intValue());
externalContext.setResponseHeader("Content-Disposition", "attachment; filename=\"" + fileToDownload.getMetadata().getFileName() + "\"");
output = externalContext.getResponseOutputStream();
Response repGetFile = ClientBuilder.newClient()
.target(fileToDownload.getMetadata().getFileURL())
.request().header("Authorization", "Bearer bearercode")
.get();
fileIs = repGetFile.readEntity(InputStream.class);
int readBytes;
byte[] buffer = new byte[1024];
while((readBytes = fileIs.read(buffer)) > 0){
output.write(buffer, 0, readBytes);
}
output.flush();
} catch (IOException ex) {
LOG.log(Level.SEVERE, null, ex);
} finally{
try {
fileIs.close();
output.close();
} catch (IOException ex) {
LOG.log(Level.INFO, null, ex);
}
}
答案 0 :(得分:0)
我相信问题是你只能在try体中输出.flush()文件。仅当稍后在finally体中创建的异常(也包含在另一个try体中)时,该文件才会关闭。我相信你应该在第一次冲洗后关闭输出。
output.flush();
output.close();
答案 1 :(得分:0)
你忘记了致电:
getContext().responseComplete();
设置标题后。