Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 仅适用于某些路线_Ruby On Rails_Wicked Pdf - Fatal编程技术网

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线程似乎无法在文件名中包含句点的情况下做到这一点:


因此我发现在中间件中删除了pdf扩展名,但我还发现中间件可以获得一些条件,以便我们可以确定何时使用pdf处理文件以及何时不使用pdf处理文件。请参阅

然后在我的
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:/[^\/]+/