Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在Object.get的输出中获取文件流_Ruby On Rails_Ruby_Amazon Web Services_Amazon S3_Aws Sdk - Fatal编程技术网

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

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

我在的帮助下编写了一个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'
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。