7

我调用了我的文档控制器的下载操作,以便为客户端提供从 s3 检索到的可下载对象。然而,OpenURI 似乎无法解析已存储的 url 回形针。这个 URL 在浏览器中是可以访问的,没有任何问题,但是当试图在控制器中打开它时,我得到一个 403 Forbidden 错误。

documents_controller

  def download
    data = open(Document.find(params[:id]).upload.url)
    send_data data.read, :type => data.content_type, :x_sendfile => true
  end

一个示例网址是

"https://s3.amazonaws.com/mybucket/documents/1/Screen_Shot.png?1372238888"

错误 - 打开 URL 时,OpenURI::HTTPError 403 禁止在操作的第一行向上射击。知道它可能是什么吗?

4

2 回答 2

4

当 URL 不是字符串格式时,可能会发生 403 错误。在类似的邮件附件示例中使用字符串插值对我有用:

doc = order.document
attachments["Order.pdf"] = File.read(open("#{doc}"))
于 2013-09-27T17:14:22.790 回答
0

这是您可以尝试的另一件事对我有用:添加“用户代理”选项:

data = open(Document.find(params[:id]).upload.url, {'User-Agent' => 'ruby'})
于 2021-12-23T18:10:06.757 回答