2014-01-23 106 views
0

使用Rails 3.2,載波,並最近切換到存儲在亞馬遜S3上。我的設置和上傳都工作正常。 1.我有image_uploader.rb來上傳和存儲圖像。顯示它們都可以正常工作 2.我有file_uploader.rb來上傳和存儲文件。我甚至進一步上傳了ZIP文件並提取了一個版本,以便ZIP文件和TXT文件都存儲在S3的正確位置。 我的問題是我在TXT文件上運行一個方法。在過去,我用storage :file 有了,我是能夠:檢索載波文件上傳到亞馬遜S3

Dir.chdir("public/uploads/") 
import_file = Dir['*.TXT'].first 
f = File.new(import_file) 

現在,我使用storage :fog我不能似乎檢索/ File.new /打開文件。 我看到用通常的命令文件:

@upload1.team_file      # stored file 
@upload1.team_file.url     # url 
@upload1.team_file_url(:data_file).to_s # version created 

我一直在通過各種非常有限的引線上檢索和/或打開文件澆築,但一切我嘗試似乎返回錯誤,如:

Errno::ENOENT: No such file or directory - https://teamfiles.s3.amazonaws.com/data_files… 

關於在AmazonS3中檢索和使用文件的區別的思考?謝謝!

+0

獲取此值並嘗試放入瀏覽器 - 「@ upload1.team_file.url」,這可能導致訪問錯誤? – house9

+0

不錯的鉛屋9。正如我所提到的,我上傳ZIP文件,然後用uniq ext .abc提取文本文件。但是,從瀏覽器中我發現了MAIN文件的錯誤和VERSION文件的下載。從S3控制檯元數據鍵:內容類型,值:應用程序/ ZIP該值需要是唯一擴展名爲text/abc的文本。一旦我設置了,我的方法可以打開文件,如下所示:f = open(self.team_file_url(:data_file))現在訣竅是弄清楚如何在提取的文件上正確調整元數據,而不必手動設置它每次!! ?? – Bart

回答

1

從多線程,API等拉我回答我自己的問題,我發現了什麼。我歡迎任何更正或改進:

要檢索上傳到AmazonS3的載波文件,您必須瞭解open(@upload.file_url)File.open(@upload.file_url)不會打開文件,它只會打開文件的PATH。 (ref:Ruby OpenURI) 我使用:open_uri_url = open(@upload.file_url)

然後您必須在該路徑中找到所需的特定文件。對於我來說,我然後發現上傳到AmazonS3的ZIP文件,解壓ZIP文件中,我想用一個獨特的*擴展名爲.abc的特定文件:

zip_content_file = Zip::File.open(open_uri_url).map{|content| content if content.to_s.split('.').last == "ABC"}.compact.first 

現在,從這裏開始,在這裏解壓到??我創建了Rails tmp目錄中唯一的目錄中提取文件,使用它,然後刪除該目錄:

tmp_directory = "tmp/extracts/#{@upload.parent_id}/" 
FileUtils.mkdir_p(tmp_directory) unless File.directory?(tmp_directory) 
extract = zip_content_file.extract(tmp_directory + content_file.to_s) 

現在從AmazonS3存儲ZIP文件中發現並提取,我可以打開,閱讀等:

f = File.new(tmp_directory + extract.to_s) 

我希望這可以幫助Carrierwave,AmazonS3,ZIP文件和一旦上傳使用它們。