【问题标题】:Able to upload an image to Dropbox but cannot get and store the image url on Database能够将图像上传到 Dropbox,但无法获取图像 url 并将其存储在数据库中
【发布时间】:2014-07-07 02:57:03
【问题描述】:

大家好,我正在使用回形针保管箱 gem >= 1.1.7

paperclip dropbox gem

那么这是我的属性:

  • 头像
  • 头像文件名
  • avatar_content_type
  • 头像文件大小:
  • avatar_updated_at:

以我的形式: = f.file_field :avatar

在我的模型中 has_attached_file :avatar, :storage => :dropbox, :dropbox_credentials => Rails.root.join("config/dropbox.yml"), :dropbox_visibility => 'public'

然后,当我添加图片时,我可以将图片上传到 Dropbox 并 这些属性有一个值 avatar_content_type、avatar_file_size、avatar_updated_at 但它无法存储上传的图片网址。请帮忙谢谢!

PS。我使用的是非高级 Dropbox 帐户和我们上传到 Dropbox 的 Apps/my_images 文件夹中的图像。

【问题讨论】:

  • 您能否详细说明您要存储的 URL 以及为什么无法存储?上传到 Dropbox 的文件并没有真正开始的 URL,除非您调用 /shares 或 /media 之类的 API 来获取可共享/流式链接。除此之外,您是否遇到任何错误?

标签: ruby-on-rails paperclip dropbox dropbox-api


【解决方案1】:

你是对的。它没有存储上传的 avatar_url。因为每当您调用 model_name.avatar.url 时,在“App 文件夹”访问中,它每次都会调用 dropbox api,并且由此生成的链接仅在 4 小时内有效。所以你不能将这个生成的 url 存储到数据库中以备将来使用。这里我将向您解释 Dropbox 中的访问类型:

完整的 Dropbox 访问权限

文件将存储在公共文件夹中。下载 URL 是可预测的、永久有效的,并且不需要 API 调用来检索,但如果您不希望您的文件被轻松访问,这可能不是一件好事。当使用一个帐户为多个站点存储数据时(例如登台和生产实例),您需要确保它们不会互相干扰。

请注意,在 2012 年 10 月 4 日之后创建的帐户默认未启用公用文件夹:转到此处启用它。如果您收到文件夹已删除的消息,只需在根目录中创建一个名为 Public 的文件夹,它应该会获得特殊图标。

应用文件夹访问权限

文件将存储在应用程序下的子文件夹中(可在应用程序设置中配置)。下载 URL 是通过调用 Dropbox API 按需生成的,并且仅在 4 小时内有效。这意味着您的文件的公开程度略低,您可以通过创建多个应用程序将数据与多个站点隔离开来。

在应用文件夹模式下,对附件的每次调用 #url 都会导致对 Dropbox 的 HTTP 请求。这是否可以接受取决于您存储的内容以及您如何向用户公开。

参考。来自here.

如果您想使用 dropbox 专业版,请使用此步骤将生成的 url 存储到数据库中。

  • 将 avatar_url 的迁移添加到 db 中,然后执行 rake db:migrate。

然后在模型中添加这个回调,以便在 db 中存储 avatar_url。

after_commit :add_avatar_url_to_article, on: :create

private

def add_avatar_url_to_article
  self.update_column(:avatar_url, self.avatar.url)
end

如果您还需要任何其他信息,请告诉我。

【讨论】:

    猜你喜欢
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    相关资源
    最近更新 更多