我在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解决方案时,我的屏幕就像以下一样。
答案 0 :(得分:0)
截至目前,我正在做的是从对象获取这样的URL:
url = object.presigned_url(:get, expires_in: 3600)
并使用以下代码发送回复:
data = open(url)
send_data data.read, filename: file_name, type: "mime/type"