首页 文章

Rails 5.2 Rest API Active Storage - 上载从外部服务接收的文件blob

提问于
浏览
3

我们正在从外部服务接收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

我们希望上传blob,而无需写入磁盘上的实际文件,然后上传它 .

1 回答

  • 4

    在处理POST调用的Controller方法中

    # 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的更多信息,请访问here .

相关问题