【问题标题】:How to get file stream in the output of Object.get如何在 Object.get 的输出中获取文件流
【发布时间】:2017-09-14 01:40:33
【问题描述】:

我在aws-sdk-ruby 的帮助下编写了一个Rails API,它从AWS 检索文件并在API 的响应中返回。我能否以某种方式获得响应 object.get 的文件流,我可以直接从 Rails API 返回。

s3 = Aws::S3::Resource.new
bucket_name = "my_bucket"
bucket = s3.bucket(bucket_name)
object = bucket.object("a/b/my.pdf")
Rails.logger.info 'Downloading file to AWS'
downloaded_data = object.get({})
send_data(downloaded_data,
    :filename => "my.pdf",
    :type => "mime/type"
)

但它不返回文件。

我知道的一个选项是首先使用以下行将文件保存在本地:

object.get(response_target: '/tmp/my.pdf')

我可以返回这个文件但是有没有办法跳过这一步直接返回object.get的响应而不保存在本地

我不能使用this 解决方案,因为我的 URL 不是公开的,我只是在创建一个 REST API。

当我尝试this 解决方案时,出现如下屏幕。

【问题讨论】:

  • @AndreyDeineko,这个问题不同,因为已经有文件可以通过 URL 公开访问。
  • 它对您不起作用吗?如果没有,我将重新提出问题。
  • @AndreyDeineko 就我而言,一件事是,我只有 REST API 返回文件,而不是完整的 Rails 应用程序,其次没有内容的公共 URL。

标签: ruby-on-rails ruby amazon-web-services amazon-s3 aws-sdk


【解决方案1】:

到目前为止,我正在做的是从对象中获取一个 URL,如下所示:

url = object.presigned_url(:get, expires_in: 3600)

并使用以下代码发送响应:

data = open(url)
send_data data.read, filename: file_name, type: "mime/type"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    相关资源
    最近更新 更多