【问题标题】:Restrict file upload to some file extensions限制文件上传到某些文件扩展名
【发布时间】:2011-06-08 12:26:28
【问题描述】:

我在上传文件时遇到问题。我想允许用户上传系统允许的文件...

例如,我允许用户上传扩展名为 *.jpg 的文件。因此,在文件选择窗口中,他们只能看到带有 jpg 扩展名的文件。

我怎样才能在 RoR 中获得这个?

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    在 HTML5 中,您可以使用 :accept 来限制 mime 类型,如下所示:

     <%= file_field_tag :csv_file,  :accept => 'text/csv' %>
    

    【讨论】:

    • 什么是“csv_file”?是内置的吗?
    • @Jubl 不是该字段的名称。看看 API apidock.com/rails/ActionView/Helpers/FormTagHelper/…
    • @Ctpelnar1988 检查 API(上面的网址)。您可以设置为接受多个文件(尽管这取决于您的浏览器)并设置为接受一种或多种 mime-types。
    【解决方案2】:

    这个问题的答案可能与 html 上传有关,而不是 rails。

    当您要上传文件时,通常使用 type="file" 进行输入。

    这可以在 Rails 中使用file_field_tag helper 来完成。它会生成一个带有 type="file" 的输入,它也可以有一个 accept 属性,但你不能真正使用它,因为它不会真正产生任何可见的效果。这个属性接受 MIME 类型,而不是扩展,大多数浏览器甚至不使用它。

    您可以做的最好的事情可能是在上传之前使用 javascript 检查文件扩展名(在您从对话框中选择文件之后)。在this question 中阅读更多相关信息。

    关键是,您不能强制操作系统只显示您想要的文件扩展名。您可以在上传之前使用 JS 例如验证扩展名,或者在上传后检查文件的内容,服务器端

    【讨论】:

    • 使用 Javascript 不是一个好主意,因为它很容易被绕过。最好使用服务器端验证,例如由回形针支持。
    • 我不建议使用 javascript 进行验证,而只是作为一种形式(我的意思是..为什么让某人上传带有错误扩展名的图片)。如果用户上传文件,即使具有所需的扩展名,很明显它必须在服务器端进行检查。但这不是这里的问题。问题是是否可以在上传之前对其进行验证(可能是为了节省上传无效内容的时间。至少我是这么看的)
    【解决方案3】:

    首先您可以使用extname 方法来验证您正在保存的文件。 http://apidock.com/ruby/File/extname/class

    其次,我使用 Paperclip gem https://github.com/thoughtbot/paperclip 上传文件。有用于验证扩展的 validate_attachment_content_type 方法: http://rdoc.info/gems/paperclip/2.3.8/Paperclip/ClassMethods#validates_attachment_content_type-instance_method

    【讨论】:

      【解决方案4】:
      <%= file_field_tag :file, accept: 'image/jpg'%>
      

      在轨道 5.2 上

      【讨论】:

      • 不只是提供代码,理想情况下,您应该在此处包含对为什么代码有用的解释。这将有助于减少任何来回,并帮助新开发人员理解推理,而不仅仅是语法。
      • 此外,我建议您在贡献自己的答案之前检查现有答案。这似乎在很大程度上重申了七年前的公认答案和评价最高的答案所建议的内容。
      猜你喜欢
      • 2012-08-18
      • 2015-01-21
      • 1970-01-01
      • 1970-01-01
      • 2017-07-05
      • 2014-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多