【问题标题】:Carrierwave how to get the file extensionCarrierwave 如何获取文件扩展名
【发布时间】:2012-07-23 13:54:09
【问题描述】:

我正在开发一个需要上传/下载文件的 Ruby on Rails 应用程序。对于上传部分,我使用了 gemcarrierwave,因为它非常易于使用且非常灵活。问题是:一旦我上传了文件,我需要知道一些事情:即如果它是 pdf 而不是下载文件,我会内联显示它,图像也是如此。如何获取文件扩展名以及如何将文件发送给用户?任何反馈都表示感谢!谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 file-upload carrierwave


    【解决方案1】:

    确定文件扩展名(我想挂载的上传器的名称是“文件”):

    file = my_model.file.url
    extension = my_model.file.file.extension.downcase
    

    然后准备 mime 和 disposition 变量:

    disposition = 'attachment'
    mime = MIME::Types.type_for(file).first.content_type
    
    if %w{jpg png jpg gif bmp}.include?(extension) or extension == "pdf"
      disposition = 'inline'
    end
    

    (如果需要,添加其他扩展名)。

    然后发送文件:

    send_file file, :type => mime, :disposition => disposition
    

    【讨论】:

    • 非常感谢,我喜欢您解决方案的风格,而且效果很好。再次感谢您的回复!
    • 您在 rails 项目文件中的哪个位置放置了处置和 MIME 类型变量?
    【解决方案2】:

    上传文件后,名称将存储在数据库中。这也包括扩展名。假设你有一个User 模型,上传器安装为asset,那么你可以得到它:

    user.asset.file.extension
    

    至于发送给用户,如果你调用user.asset_url,它会给你上传文件的URL。用户可以使用该链接来获取文件。还是我误解了“将文件发送给用户”的意思?

    【讨论】:

    • 感谢回复!!好吧,我想让用户下载文件。你知道,下载对话框(用.. 打开或保留它,或者在 chrome 情况下保留或拒绝。)我认为使用带有参数的简单 send_file 就可以了。
    • 好吧,然后链接到文件。您可以使用user.asset_url 获取网址。
    • 是的,我做到了!您的建议非常有效,非常感谢!
    • 在上传者的上下文中,您只需要调用file.extension,例如在def filename; ["original", file.extension].join('.'); end
    猜你喜欢
    • 2014-04-14
    • 2017-12-22
    • 1970-01-01
    • 2019-03-22
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多