首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 5.2 Shrine和Tus服务器:无法创建自定义文件夹结构来保存文件

Rails 5.2 Shrine和Tus服务器:无法创建自定义文件夹结构来保存文件
EN

Stack Overflow用户
提问于 2020-05-31 13:32:46
回答 1查看 121关注 0票数 1

我正在使用Rails5.2、Shry2.19和TusServer2.3来实现可恢复的文件上传

routes.rb

代码语言:javascript
复制
  mount Tus::Server => '/files'

型号,file_resource.rb

代码语言:javascript
复制
class FileResource < ApplicationRecord
  # adds an `file` virtual attribute
  include ResumableFileUploader::Attachment.new(:file)

控制器/文件_Controler.rb

代码语言:javascript
复制
def create
      file = FileResource.new(permitted_params)
      ...
      file.save

config/initializers/shintine.rb

代码语言:javascript
复制
s3_options = {
  bucket: ENV['S3_MEDIA_BUCKET_NAME'],
  access_key_id: ENV['S3_ACCESS_KEY'],
  secret_access_key: ENV['S3_SECRET_ACCESS_KEY'],
  region: ENV['S3_REGION']
}

Shrine.storages = {
  cache: Shrine::Storage::S3.new(prefix: 'file_library/shrine_cache', **s3_options),
  store: Shrine::Storage::S3.new(**s3_options), # public: true,
  tus: Shrine::Storage::Tus.new
}

Shrine.plugin :activerecord
Shrine.plugin :cached_attachment_data

config/initializers/tus.rb

代码语言:javascript
复制
Tus::Server.opts[:storage] = Tus::Storage::S3.new(
  prefix: 'file_library',
  bucket: ENV['S3_MEDIA_BUCKET_NAME'],
  access_key_id: ENV['S3_ACCESS_KEY'],
  secret_access_key: ENV['S3_SECRET_ACCESS_KEY'],
  region: ENV['S3_REGION'],
  retry_limit: 3
)
Tus::Server.opts[:redirect_download] = true

我的问题是,我不能覆盖Shrine类的generate_location方法来将文件存储在亚马逊网络服务s3的不同文件夹结构中。

所有文件都是在s3://bucket/file_library/ (tus.rb中提供的前缀)中创建的。我想要类似s3://bucket/file_library/:user_id/:parent_id/文件夹结构的东西。

我发现Tus配置覆盖了我所有的resumable_file_uploader类自定义选项,并且对上传没有影响。

resumable_file_uploader.rb

代码语言:javascript
复制
class ResumableFileUploader < Shrine
  plugin :validation_helpers  # NOT WORKS
  plugin :pretty_location     # NOT WORKS

  def generate_location(io, context = {})  # NOT WORKS
    f = context[:record]
    name = super # the default unique identifier

    puts "<<<<<<<<<<<<<<<<<<<<<<<<<<<<"*10

    ['users', f.author_id, f.parent_id, name].compact.join('/')
  end

  Attacher.validate do                    # NOT WORKS
    validate_max_size 15 * 1024 * 1024, message: 'is too large (max is 15 MB)'
  end

end

那么,如何使用tus选项在S3中创建自定义文件夹结构(因为shrine选项不起作用)?

EN

回答 1

Stack Overflow用户

发布于 2020-05-31 16:30:22

tus服务器上传根本不涉及神社,所以不会调用#generate_location,而是由tus-ruby-server决定位置。

请注意,tus服务器应该只充当临时存储,您仍然应该使用Shrine将文件复制到永久存储(也称为“升级”),就像常规的直接上传一样。在升级时,将调用#generate_location方法,因此文件将被复制到所需的位置;这一切都会在默认的神殿设置中自动发生。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62111979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档