2017-04-18 109 views
0

我寫了一個Rails API,在aws-sdk-ruby的幫助下,它從AWS中檢索一個文件並返回API的響應。我可以通過object.get以某種方式得到文件流,我可以直接從Rails API返回。如何在Object.get中輸出文件流

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解決方案,因爲我的URL不公開,我只是創建一個REST API。

當我試着this解決方案時,我得到如下畫面。

enter image description here

+0

@AndreyDeineko ,這個問題是不同的,因爲這些文件已經可以通過URL公開訪問。 – Saurabh

+0

它不適合你嗎?如果不是,我會重新提出這個問題。 –

+0

@AndreyDeineko就我而言,有一件事,我只有REST API返回文件,而不是完整的Rails應用程序,其次沒有內容的公共URL。 – Saurabh

回答

0

截至目前我在做什麼,從這樣的對象得到一個URL:

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

,並使用下面的代碼來發送響應:

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