gpt4 book ai didi

ruby-on-rails - 通过 API 使用 Activestorage(直接上传)

转载 作者:行者123 更新时间:2023-12-03 15:52:25 24 4
gpt4 key购买 nike

我想使用 Rails 作为移动应用程序(Android 和 iOS)的后端,其中一项要求是文件上传。

我找不到任何关于以这种方式直接上传使用 Activestorage 的资源——有没有人有例子或提示?

另一种选择 - 我想 - 是对 activestorage.js 进行逆向工程,并完全按照它所做的去做。但也许我不是第一个有这种需求的人......

最佳答案

我使用 rails 作为后端,但我使用多态文档模型来上传文档。最近我将回形针api转换为文档模型的主动存储。
这变成了我的文档模型,带有事件存储 base 64 解码多态:

class Document < ApplicationRecord
has_one_attached :doc
belongs_to :documentable, polymorphic: true, optional: true
attr_accessor :doc_contents
attr_accessor :doc_name


after_create :parse_doc
validate :doc_validations, on: :create


def parse_doc
# If directly uploaded
unless self.doc_contents.nil? || self.doc_contents[/(image/[a-z]{3,4})|(application/[a-z]{3,4})/] == ''
content_type = self.doc_contents[/(image/[a-z]{3,4})|(application/[a-z]{3,4})/]
content_type = content_type[/\b(?!./)./]
contents = self.doc_contents.sub /data:((image|application)/.{3,}),/, ''
decoded_data = Base64.decode64(contents)
filename = self.doc_name || 'doc_' + Time.zone.now.to_s + '.' + content_type
File.open("#{Rails.root}/tmp/images/#{filename}", 'wb') do |f|
f.write(decoded_data)
end
self.doc.attach(io: File.open("#{Rails.root}/tmp/images/#{filename}"), filename: filename)
FileUtils.rm("#{Rails.root}/tmp/images/#{filename}")
end
end


private


def doc_validations
if self.doc_contents.nil?
errors.add(:base, I18n.t('errors.documents.file_required'))
end
end
end

关于ruby-on-rails - 通过 API 使用 Activestorage(直接上传),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49689118/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com