使用活动存储验证直接上传的文件类型?可能吗?

Posted

技术标签:

【中文标题】使用活动存储验证直接上传的文件类型?可能吗?【英文标题】:Validate file type on Direct Uploads with Active Storage? Is it possible? 【发布时间】:2019-09-01 10:47:28 【问题描述】:

我在我的模型中创建了一个方法来验证上传文件类型。但它不起作用,我认为这是因为我使用的是直接上传。

是否可以通过主动存储直接上传来验证文件类型?我该怎么做?

我试过了:

型号:

validate :correct_video_type


  def correct_video_type
    if video.attached? && video.content_type.in?(%w(video/mov video/mp4 video/avi video/mpeg))
      errors.add(:video, "Must be video format")
    elsif video.attached? == false
      errors.add(:video, "Video must be attached")
    end
  end

查看:

<%= form.file_field :video, class: "upload", direct_upload: true %>

没有任何东西被验证...

我也尝试过前端验证,但没有成功:

 <%= form.file_field :video, class: "upload", direct_upload: true, accept: 'video/mov, video/mpeg, video/mp4, video/avi' %>

这些都不起作用。即使前端可以工作,我仍然想在后端进一步验证它。

我如何验证这一点?

【问题讨论】:

您是否尝试在correct_video_type 中添加断点以查看是否被调用? 我没有。我也在不使用 direct_upload 的情况下尝试了这个,但它也没有用。我可以假设它没有被调用? 我想说试试断点检查 查看***.com/questions/48158770/… @Nandhini 谢谢,我想是时候升级了.... 【参考方案1】:

您可以使用此gem。据我所知,它实现了你所做的)

【讨论】:

以上是关于使用活动存储验证直接上传的文件类型?可能吗?的主要内容,如果未能解决你的问题,请参考以下文章

活动存储:表单重新显示时保留/缓存上传文件的最佳实践

验证表单内的“输入类型文件”和“下拉选项”(使用 angularjs)可能吗?

关于ACtion类利用file类型取得上传文件的内容,名字和内容类型

添加 Firebase 存储用户上传限制

vue实现文件上传

Rails 6主动存储sidekiq文件在S3上上传背景图片