当前位置: 首页 > 知识库问答 >
问题:

如何使用主动存储从URL存储图像

商高谊
2023-03-14

我的问题是:当我使用活动存储时,如何从URL上传图像。我在Stackoverflow中使用了来自其他帖子的代码,但传递了model方法,即我需要存储在表中的param。奇怪的是,我收到了下一个错误:

ActiveSupport::MessageVerifier::PostsController中的无效签名#更新

但是当我从这个模型重新加载show视图时,图像显示为存储并部署在我的posts视图中。

在这里我的代码后模型:

class Post < ApplicationRecord
  require 'open-uri'

  has_one_attached :image_one
  has_one_attached :image_two
  has_one_attached :url_image

  before_save :grab_image

  
  def grab_image(url)
    downloaded_image = open(url)
    self.url_image.attach(io: downloaded_image, filename: "map.jpg", content_type:"image/jpg")
  end
  
end

这是我在控制器的编辑操作中的代码:

  def update
    @posturl = params[:post][:url_image]
    @post.grab_image(@posturl)
    respond_to do |format|
      if @post.update!(post_params)
        format.html { redirect_to @post, notice: 'Post was successfully updated.' }
        format.json { render :show, status: :ok, location: @post }
      else
        format.html { render :edit }
        format.json { render json: @post.errors, status: :unprocessable_entity }
      end
    end
  end

我得到了以下链接,其中谈到了从URL上传图像的机会,但我不知道我还能做什么:

活动存储概述-边缘指南

@omnilord/rails-5-2-activestorage-Employment-adoption-陷阱

共有3个答案

敖永丰
2023-03-14

以下是一个例子:

file_url = image[:image_url]
download = open(file_url)
IO.copy_stream(download,
user.image.attach(
  io: download,
  filename: image[:name],
  content_type: image[:content_type],
))
宰父存
2023-03-14

不需要显式输入文件名的最简单方法是:

require 'open-uri'

url = URI.parse("https://your-url.com/abc.mp3")
filename = File.basename(url.path)
file = URI.open
user = User.first
user.avatar.attach(io: file, filename: filename)

这会针对特定用户对象自动保存化身。

如果您使用的是远程服务(如S3),则可以通过以下方式检索URL:

user.avatar.service_url
洪知
2023-03-14

也许这对你有用:

file = open(url)
user.image.attach(io: file, filename: "temp.#{file.content_type_parse.first.split("/").last}", content_type: file.content_type_parse.first)
 类似资料:
  • 我正在尝试在谷歌云上迁移我的rails应用程序。我已将活动存储与地面军事系统上创建的存储桶连接起来。我上传了bucket中的文件夹“storage”,但应用程序中的所有图像都有404错误。 如何正确迁移GCS中的本地存储文件夹? 谢谢你的建议

  • 我正在开发一款用于拍照的Android应用程序。首先,用户拍摄个人资料图片。此图像的Url保存在Firebase实时数据库中。用于检索以下下载URL的示例代码 这个url被保存在数据库中的多个地方,我需要在那里加载用户的个人资料图片——他的每个帖子的条目,他给应用程序上其他人的消息,等等。 现在,如果他以后更改个人资料图片,我有以下两个选项 更新每个数据库条目-非常繁琐、暴力和资源密集 那么,有没

  • 我想从FireBase的方法获取下载Url。如何使用以下代码获取下载Url? 我使用了,但这不起作用。

  • 我正在学习firebase,有一些关于Firebase存储的问题: < li >我可以使用的总文件大小的限制? < li >我想使用firebase datastorage使用avatar上传图像,然后使用该url将图像加载到带有glide或picasso的imageview。可能吗? < li >我想将我的应用程序与firebase authenticate配合使用,以使用登录、firebase