Http 为ResourceReference(PDF)指定动态文件名
我有一个Wicket应用程序,它允许用户生成PDF并在弹出窗口中打开它们。我这样定义了自己的共享资源Http 为ResourceReference(PDF)指定动态文件名,http,pdf,wicket,content-type,wicket-1.6,Http,Pdf,Wicket,Content Type,Wicket 1.6,我有一个Wicket应用程序,它允许用户生成PDF并在弹出窗口中打开它们。我这样定义了自己的共享资源 public class PdfResourceReference extends SharedResourceReference { @Override public IResource getResource() { return new ByteArrayResource("application/pdf") { @Override
public class PdfResourceReference extends SharedResourceReference {
@Override
public IResource getResource() {
return new ByteArrayResource("application/pdf") {
@Override
protected byte[] getData(final Attributes attributes) {
// generate the pdf and return byte[]
}
};
}
}
在应用程序类中,我通过
mountResource("reportPdf", new PdfResourceReference());
一切正常,浏览器会打开pdf文件。但问题是pdf文件的名称(一旦用户试图保存它)总是“reportPdf”。我们的用户希望根据报告类型或客户编号命名pdf。类似“0123someCustomerId_report.pdf”的内容
我发现了一个建议使用“内容处置”标题的方法。不幸的是,我不知道如何让它工作(似乎并非所有浏览器都支持它)
这类问题还有其他解决办法吗?是否可以将装载路径与动态(类似regex)路径一起使用?我猜您有一个带有
href=“reportPdf”
的静态锚点I html
改用a。您可以使用DownloadLink(字符串id、IModel模型、字符串文件名)
从IModel返回PDF,最好是LoadableDetachableModel
基本上就是这种方法:我通过向挂载的URL提供“filename”参数解决了这个问题,如下所示:
mountResource("reportPdf/${filename}", new PdfResourceReference());
向PageParameters添加一个“filename”参数,然后生成类似/reportPdf/0123someCustomerId_report的URL,浏览器以用户喜欢的方式保存它
也许有人会想出一个更好的解决方案,但到目前为止,它工作得很好,我不必使用每个浏览器解释不同的HTTP头