Ruby on rails 如何在Object.get的输出中获取文件流
我在的帮助下编写了一个Rails API,它从AWS检索一个文件,并在API的响应中返回。我可以得到响应的文件流,我可以直接从Rails API返回Ruby on rails 如何在Object.get的输出中获取文件流,ruby-on-rails,ruby,amazon-web-services,amazon-s3,aws-sdk,Ruby On Rails,Ruby,Amazon Web Services,Amazon S3,Aws Sdk,我在的帮助下编写了一个Rails API,它从AWS检索一个文件,并在API的响应中返回。我可以得到响应的文件流,我可以直接从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' downloade
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不是公共的,我只是在创建一个RESTAPI
当我尝试解决方案时,我得到了如下屏幕
到目前为止,我正在做的是从对象获取URL,如下所示:
url = object.presigned_url(:get, expires_in: 3600)
并使用以下代码发送响应:
data = open(url)
send_data data.read, filename: file_name, type: "mime/type"
@AndreyDeineko,这个问题是不同的,因为有些文件已经可以通过URL公开访问了。这对你不起作用吗?如果没有,我将重新开始这个问题。@AndreyDeineko在我的例子中,有一件事,我只有restapi返回文件,而不是完整的Rails应用程序,第二,没有内容的公共URL。