使用Rails3.2,载波,最近切换到亚马逊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)我看到了包含常用命令的文件:
@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中检索和使用文件的区别有什么看法?谢谢!
发布于 2014-02-01 03:29:35
从多个线程、API等中提取。我正在用我所发现的回答我自己的问题。我欢迎任何更正或改进:
要检索上传到AmazonS3的carrierwave文件,您必须了解open(@upload.file_url)或File.open(@upload.file_url)不会打开文件,它只打开文件的路径。(参考: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文件和上传后的使用有所帮助。
https://stackoverflow.com/questions/21319042
复制相似问题