在Wicket 1.4中,我有一个自定义的AbstractResourceStreamWriter(用于自定义类型的链接,用于流式传输即时生成的文件):
private AbstractResourceStreamWriter resourceStreamWriter() {
return new AbstractResourceStreamWriter() {
@Override
public void write(OutputStream output) {
try {
reportService.generateReport(output, report);
} catch (ReportGenerationException e) {
// ...
}
}
@Override
public String getContentType() {
return CONTENT_TYPES.get(report.getOutputType());
}
};
}
在Wicket 1.5中, IResourceStreamWriter界面已更改,因此该方法获得Response而不是OutputStream 。 IResourceStreamWriter javadocs仍然谈论OutputStream有点令人困惑:
Resource可以返回的特殊IResourceStream实现 它直接想要写入输出流而不是返回 IResourceStream.getInputStream()
...
实现此方法直接写入资源数据 给出OutputStream。
无论如何,我没有看到从响应中获取OutputStream的快捷方法。
鉴于我有一个方法(上面代码中的调用generateReport(output, report)
)需要一个OutputStream写入,有什么最简单的方法让它再次工作?
答案 0 :(得分:1)
怎么样?
ByteArrayOutputStream baos = new ByteArrayOutputStream();
reportService.generateReport(baos, report);
response.write(baos.toByteArray());
或类似的东西?
答案 1 :(得分:0)
有一个org.apache.wicket.request.Response#getOutputStream()。但我再次确定这与1.4.x中的相同。在1.5中,这将缓冲您在输出流中写入的内容。 javadoc说它不应该被缓冲。