Ruby on rails 仅适用于某些路线
我有一个路径Ruby on rails 仅适用于某些路线,ruby-on-rails,wicked-pdf,Ruby On Rails,Wicked Pdf,我有一个路径/document/:email/:filename,:email=>/.*/,:filename=>/.*/,它只需要获取文件名,在存储中搜索并返回它。但是,在我开始对其他组件使用wicked_pdf之后,控制器中的参数[:filename]停止识别.pdf扩展名。因此,在下载pdf之前,请先查看路径/document/somemail@mail.com/myfile.pdf在我的控制器上生成了参数param[:filename]=='myfile.pdf',但是在我集成了wick
/document/:email/:filename,:email=>/.*/,:filename=>/.*/
,它只需要获取文件名,在存储中搜索并返回它。但是,在我开始对其他组件使用wicked_pdf之后,控制器中的参数[:filename]
停止识别.pdf扩展名。因此,在下载pdf之前,请先查看路径/document/somemail@mail.com/myfile.pdf
在我的控制器上生成了参数param[:filename]=='myfile.pdf'
,但是在我集成了wicked\u pdf之后,该参数没有文件扩展名,即param[:filename]=='myfile'
如何避免这种行为?
我不想让wicked_pdf处理我的应用程序的所有pdf文件请求,只针对特定的路由/控制器我相信这是因为在中,它注册了如下扩展名:
如果Mime::Type.lookup\u by\u扩展名(:pdf).nil?
Mime::Type.register('application/pdf',:pdf)
终止
因此,以前,:filename
只是一个路由参数,但现在Rails知道有一个匹配的扩展名,它似乎将其视为一个可以后跟扩展名的文件名,扩展名应该作为参数[:format]
提供
您应该能够通过将其引用为获取完整的文件名
filename=[params[:filename],params[:format].compact.join('..)
或者像这样取消注册Mime扩展(可能在wicked_pdf初始值设定项中):
Mime::Type.unregister(:pdf)
还有一种方法可以修改路由全局绑定以将扩展名作为文件名的一部分,但与该主题相关的其他StackOverflow线程似乎无法在文件名中包含句点的情况下做到这一点:
application.rb
上,我只需要设置以下条件:
wickedpdfFormat = /wickedpdf_/
config.middleware.use(WickedPdf::Middleware, {}, {:only => [wickedpdfFormat]})
现在我只需要为我希望由wicked_pdf处理的文件添加wickedpdf_前缀嘿,谢谢,但我无法处理您的任何一个解决方案。get请求是使用URL发出的,因此我无法设置适当的mime类型头请求。取消注册:pdf也不起作用,因为中间件是mod正在验证请求。查看我刚刚发布的解决方案发现一篇关于如何在路由中允许点的博文:TL;DR:使用更易于接受的正则表达式指定参数,如
post'/document/:id/:filename',filename:/[^\/]+/
。