繁体   English   中英

检索上传到Amazon S3的carrierwave文件

[英]retrieve carrierwave file uploaded to Amazon S3

使用Rails 3.2,载波,最近切换到存储在Amazon S3上。 我的设置和上传都运行正常。 1.我有image_uploader.rb来上传和存储图像。 显示它们一切正常2.我有file_uploader.rb来上传和存储文件。 我甚至更进一步上传了ZIP文件并提取了一个版本,以便ZIP文件和TXT文件都存储在S3上的正确位置。 我的问题是我在TXT文件上运行一个方法。 在过去,我使用storage :file我能够:

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检索和使用文件的区别的想法? 谢谢!

从多个线程,API等拉出来。我正在用我发现的东西回答我自己的问题。 我欢迎任何更正或改进:

要检索上传到AmazonS3的carrierwave文件,您必须了解open(@upload.file_url)File.open(@upload.file_url)不会打开文件,它只打开文件的PATH。 (参考: Ruby OpenURI )我使用: open_uri_url = open(@upload.file_url)

然后,您必须在该路径中找到所需的特定文件。 对我来说,然后我找到一个上传到AmazonS3的ZIP文件,并使用唯一的* .ABC扩展名解压缩我想要的ZIP文件中的特定文件:

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文件并在上传后使用它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM