通过Rails 5 API和Active Storage接受图像

时间:2018-08-25 16:16:58

标签: ruby-on-rails-5 rails-activestorage

我正在尝试将图像发送到我的Rails应用,然后通过Active Storage存储它们。

我尝试了Base64并直接上传并进行了数小时的研究,但没有任何效果。

有人可以指出我的好方法吗?

我最后的尝试是像这样使用Base64:

def attach_preview
  page = Page.first
  content = JSON.parse(request.body.read)
  decoded_data = Base64.decode64(content["file_content"].force_encoding("UTF-8"))
  begin
    file = Tempfile.new('test')
    file.write decoded_data
    #page.thumbnail = file
    filename = "foooo"
    page.thumbnail.attach(io: File.read(file), filename: filename)
    if page.save
      render :json => {:message => "Successfully uploaded the profile picture."}
    else
      render :json => {:message => "Failed to upload image"}
    end
  ensure
    file.close
    file.unlink
  end
end

但这会导致"\xAB" from ASCII-8BIT to UTF-8 error.

真的不在乎它的Base64还是其他,我只需要一种方法:-)

1 个答案:

答案 0 :(得分:0)

此方法有效,我直接使用IO,因为无论如何ActiveStorage都需要它。

def attach_thumbnail
  content = JSON.parse(request.body.read.force_encoding("UTF-8"))
  decoded_data = Base64.decode64(content["file_content"])
  io = StringIO.new
  io.puts(decoded_data)
  io.rewind
  @page.thumbnail.attach(io: io, filename: 'base.png')
  @page.save
  render json: {
    success: @page.thumbnail.attached?,
    thumbnail_url: url_for(@page.thumbnail),
    page: @page
  }
end