是否可以添加验证以仅使用Active Storage接受.pdf和.doc文件?
使用标准S3配置:
AWS_ACCESS_KEY_ID: [AWS ID]
AWS_BUCKET: [bucket name]
AWS_REGION: [region]
AWS_SECRET_ACCESS_KEY: [secret]
Run Code Online (Sandbox Code Playgroud)
我可以使用此Rails 5.2代码将文件上传到S3(使用直接上传)(仅显示相关代码):
form.file_field :my_asset, direct_upload: true
在提交表单后,这将有效地将我的资产置于我的S3存储桶的根目录中.
如何指定前缀(例如"development /",以便我可以模仿S3上的文件夹)?
ruby-on-rails amazon-s3 rails-activestorage ruby-on-rails-5.2
我有这个课程,我正在使用主动存储
class MaterialsUpload < ApplicationRecord
has_one_attached :csv_file
end
Run Code Online (Sandbox Code Playgroud)
这是附件
#<ActiveStorage::Attached::One:0x007ff1f0be9e90
@dependent=:purge_later,
@name="csv_file",
@record=
#<MaterialsUpload:0x007ff1f0c604f0
id: 3,
success: 0,
errors_list: [],
total: 0,
created_at: Mon, 12 Feb 2018 14:43:35 UTC +00:00,
updated_at: Mon, 12 Feb 2018 14:43:35 UTC +00:00>>
Run Code Online (Sandbox Code Playgroud)
有没有办法可以读取数据,所以我可以做这样的事情
string = materials_upload.csv_file.read
CSV.parse(csv_string, headers: true) do |row|
# do something
end
Run Code Online (Sandbox Code Playgroud) 创建变体时,我发现检查文件是否存在时间很慢。奇怪的是,我没有看到文件上传时的缓慢时间。我们怎样才能加快速度?
当你调用这样的东西时会发生这种情况。
@object.artwork.variant(resize: "100X100")
Run Code Online (Sandbox Code Playgroud)
注意检查文件是否存在的缓慢时间(超过 1 秒!)。
S3 Storage (1149.3ms) Checked if file exists at key: variants/K6XGSR9uuyEG17Vd6HXSLyew/4c1922cb9e0ee90688549c6a10906cc59c45f90ab173febdd7ae9dfc72c0378b
Run Code Online (Sandbox Code Playgroud)
您可以在控制台中重新创建
ActiveStorage::Blob.service.exist?("variants/K6XGSR9uuyEG17Vd6HXSLyew/4c1922cb9e0ee90688549c6a10906cc59c45f90ab173febdd7ae9dfc72c0378b")
Run Code Online (Sandbox Code Playgroud)
以上是生产中的实际示例,但通常我们会看到平均时间在 300 毫秒范围内。
使用Active Storage上载文件时,如果文件上传完毕并且表单被重新显示,例如当该表单的验证由于某种原因失败时,文件就会消失.
有没有办法在表格重新显示之间缓存或保留它?Shrine有一个很好的插件用于此目的,我正在寻找类似的Active Storage.
一个问题Active Storage(刚刚更新到rails 5.2)试图打开附加文件,保存在blob上,重定向到root_path任何想法我怎样才能打开/下载它.
我在rails视图中的代码是:
<%= link_to(document.filename, rails_blob_path(document, disposition: "attachment")) %>
Run Code Online (Sandbox Code Playgroud)
TIA
我想向我的应用程序添加操作文本。但它也设置了 Active Storage。我已经使用 CarrierWave,不需要 Active Storage。顺便说一句,我根本不需要在编辑器中上传文件。
该指南说我可以保存光盘附件以在其上运行一个过程,如下所示:
message.video.open do |file|
system '/path/to/virus/scanner', file.path
# ...
end
Run Code Online (Sandbox Code Playgroud)
我的模型的附件定义为:
has_one_attached :zip
Run Code Online (Sandbox Code Playgroud)
然后在我定义的模型中:
def process_zip
zip.open do |file|
# process the zip file
end
end
Run Code Online (Sandbox Code Playgroud)
但是我收到一个错误:
private method `open' called
Run Code Online (Sandbox Code Playgroud)
在zip.open调用.
如何在本地保存zip以进行处理?
我已将rails api应用程序从5.1更新到5.2.我只使用rails api.我正在尝试使用活动存储.我认为问题是由于线路config.api_only = true输入config/application.rb.
我做了很多谷歌,但没有找到任何东西如何在rails api中使用主动存储.
这是我的Gemfile:
source 'https://rubygems.org'
ruby '2.5.1'
git_source(:github) do |repo_name|
repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
"https://github.com/#{repo_name}.git"
end
gem 'rails', '~> 5.2.0'
gem 'pg', '>= 0.18', '< 2.0'
gem 'puma', '~> 3.7'
gem 'rack-cors'
# Auth
gem 'bcrypt'
gem 'jwt'
#Media file upload
gem 'activestorage'
# gem 'devise', '4.4.3'
# gem 'devise-jwt', '~> 0.5.6'
gem 'active_model_serializers', '~> 0.10.0', require: true
# backgroud jobs
gem 'sidekiq'
# fast boot
gem 'bootsnap', …Run Code Online (Sandbox Code Playgroud) 给定具有ActiveStorage的模型
class User
has_one_attached :avatar
end
Run Code Online (Sandbox Code Playgroud)
我可以检查一个用户是否有化身
@user.avatar.attached?
Run Code Online (Sandbox Code Playgroud)
但是,如何返回具有附件(或没有附件)的所有用户的集合?
我尝试使用joins返回带有附件的所有Users,但这在blob或附件表上似乎都不起作用,或者我的语法不正确。
我确定我忽略了一些显而易见的事情。是否可以按照以下方式做一些事情:
User.where(attached_avatar: nil)
Run Code Online (Sandbox Code Playgroud)
如果是这样,在哪里记录?