神社宝石-如何防止从S3删除上传的文件

我正在使用shrine gem通过Ruby on Rails在S3中存储图像。

我如何使神社表现如下?

.push

也就是说,一旦我在S3中上传图片,它们就永远不会被用户的操作删除。

我发现了类似的question,但我想意识到的是完全相反的情况。


目前的情况是这样的。

我按照神社S3 docs将神社装在ImageUploader上。

上载文件时,它们存储在S3中。 当我尝试从数据库中删除文件时,它们也会从S3中删除。


这是将文件上传到S3并从S3删除的代码块。

1. When uploading files from Frontend,they are stored in S3. 2. When deleting files from Frontend,they are deleted from Database,"but not deleted from S3"

config/initializers/shrine.rb

require "shrine" require "shrine/storage/file_system" require "shrine/storage/s3" s3_options = { access_key_id: ENV[accESS_KEY_ID],secret_access_key: ENV[SECRET_accESS_KEY],region: ENV[REGION],bucket: ENV[BUCKET],} Shrine.storages = { cache: Shrine::Storage::S3.new(prefix: ...,**s3_options),store: Shrine::Storage::S3.new(prefix: ...,} Shrine.plugin :activerecord Shrine.plugin :cached_attachment_data Shrine.plugin :restore_cached_data Shrine.plugin :url_options,cache: { public: true,host: ENV[CLOUDFRONT_URL] },store: { public: true,host: ENV[CLOUDFRONT_URL] } 上,设置调整大小逻辑。在ImageUploader < Shrine模型上,像Photo

那样安装上传器

从数据库中删除文件时,我像这样使用activeRecord。(这时,它们也已从S3中删除)

include ImageUploader::Attachment(:image)
iCMS 回答:神社宝石-如何防止从S3删除上传的文件

有两种方法可以实现所需的目标。

方法1:通过在控制器上使用delete而不是destroy跳过可触发Shrine回调的ActiveRecord回调。

方法2:Add mirroring and backup to your Shrine configuration如此

 Shrine.storages = { cache: ...,store: ...,backup: ... }

 Shrine.plugin :mirroring,mirror: { store: :backup }
,

我找到了一种很好的方法...

在shrine.rb初始化程序中,只需创建一个自定义类:

class NoDeletionShrineS3Storage < Shrine::Storage::S3
  def delete(id)
    true
  end

  def delete_prefixed(delete_prefix)
    true
  end

  def clear!(&block)
    true
  end
end


Shrine.storages = {
  cache: Shrine::Storage::FileSystem.new..),# temporary
  store: NoDeletionShrineS3Storage.new(
      bucket: "mybucket",# required
      region: "eu-central-1",# required
      access_key_id: '123..',secret_access_key: '123..',)
}

,

您也可以使用 keep_files Shrine 插件:https://shrinerb.com/docs/plugins/keep_files

本文链接:https://www.f2er.com/1682951.html

大家都在问