Http 为ResourceReference(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

我有一个Wicket应用程序,它允许用户生成PDF并在弹出窗口中打开它们。我这样定义了自己的共享资源

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头