如何在Object.get的输出中获取文件流

时间:2017-04-18 09:27:01

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

我在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解决方案,因为我的网址不公开,而我只是创建了一个REST API。

当我尝试this解决方案时,我的屏幕就像以下一样。

enter image description here

1 个答案:

答案 0 :(得分:0)

截至目前,我正在做的是从对象获取这样的URL:

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

并使用以下代码发送回复:

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