Rails 5.2 Rest API + Active Storage - выгрузка файлового блоба, полученного от внешнего сервиса - PullRequest
0 голосов
/ 02 июля 2018

Мы получаем вызов POST от внешнего сервиса, который содержит файловый BLOB-объект (в кодировке Base64) и некоторые другие параметры.

# POST call to /document/:id/document_data
param = {
    file: <base64 encoded file blob>
}

Мы бы хотели обработать файл и загрузить его на следующую модель

# MODELS
# document.rb  
class Document < ApplicationRecord
    has_one_attached :file
end

Мы хотели бы загрузить большой двоичный объект без записи в реальный файл на диске, а затем загрузить его.

1 Ответ

0 голосов
/ 02 июля 2018

В методе Controller, обрабатывающем вызов POST

# documents_controller.rb - this method handles POST calls on /document/:id/document_data

def document_data

  # Process the file, decode the base64 encoded file
  @decoded_file = Base64.decode64(params["file"])

  @filename = "document_data.pdf"            # this will be used to create a tmpfile and also, while setting the filename to attachment
  @tmp_file = Tempfile.new(@filename)        # This creates an in-memory file 
  @tmp_file.binmode                          # This helps writing the file in binary mode.
  @tmp_file.write @decoded_file
  @tmp_file.rewind()

  # We create a new model instance 
  @document = Document.new
  @document.file.attach(io: @tmp_file, filename: @filename) # attach the created in-memory file, using the filename defined above
  @document.save

  @tmp_file.unlink # deletes the temp file
end

Надеюсь, это поможет.

Подробнее о Tempfile можно найти здесь .

...