我在控制器操作中加密我的Shrine文件上传,在执行其他操作之前,需要某种方式验证它们的mime类型。Shrine的验证插件非常棒,但它们不适用于加密文件。我需要想办法解决这个问题。
这里的建议是针对ActiveStorage的,似乎不太合适。第一篇文章建议在模型中进行验证,但我需要在控制器中进行验证。可能是。。。
def create
image = params.require(:id_doc).fetch(:image)
respond_to do |format|
if image.content_type == 'image/jpeg' || image.content_type == 'image/png' && image.size <= 3.megabytes
#encrypt file and save
format.html { redirect_to root_path }
else
format.html { redirect_to onboard_queued_path }
end
end
即便如此,它似乎也不安全。我可以更改文件名。这个答案似乎很有希望。或者,我可以使用这个,但我不想安装整个gem。
答案在文档中。
由于我想在将文件传递给其他任何东西之前确定mime类型,所以我只需在控制器中执行Shrine.mime_type(image)
。