问题描述
我想先加密文件,然后再将其存储在S3上。我正在使用Shrine进行上传,并使用LockBox进行加密。 Shrine#upload
使用类似IO的对象,但是Lockbox documention排除了设置此对象所需的一些步骤。它只是说要做类似的事情:
class Photo < ApplicationRecord
belongs_to :imageable,polymorphic: true
validates_presence_of :image
lockBox = LockBox.new(key: ENV['LOCKBox_MASTER_KEY'])
PhotoUploader.upload(lockBox.encrypt_io(image),:store)
end
在这种情况下,image
是未定义的局部变量。
如果文件是用户上传的(并在控制器中列入白名单),我将如何在模型中访问它,以便在保存文件时可以执行此操作?
解决方法
您可以将其移至before_save
方法中。如果您想这样做的话,也可以将其更改为after_save
(问题尚不清楚)。
before_save :encyrpt_image
def encrypt_image
lockbox = Lockbox.new(key: ENV['LOCKBOX_MASTER_KEY'])
PhotoUploader.upload(lockbox.encrypt_io(self.image),:store)
end