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

我在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的响应而不保存在本地

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

当我尝试这个解决方案时,我得到了屏幕。

在此处输入图像描述

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

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

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

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