Paperclip - отличный загрузочный плагин для Rails. Сохранение загрузок в локальной файловой системе или Amazon S3, похоже, хорошо работает. Я бы просто предположил файлы хранилища на локальном хосте, но для этого приложения требуется использование S3, поскольку оно будет размещено на Heroku.Застежка-молния все вложения скрепки, хранящиеся на S3
Как я могу получить все мои загрузки/вложения с S3 в одной загруженной zip-загрузке?
Получение zip-файлов из локальной файловой системы кажется прямым. Он получает файлы из S3, которые меня озадачили. Я думаю, что это может быть связано с тем, как rubyzip обрабатывает файлы, на которые ссылается URL. Я пробовал различные подходы, но не могу избежать ошибок.
format.zip {
registrations_with_attachments = Registration.find_by_sql('SELECT * FROM registrations WHERE abstract_file_name NOT LIKE ""')
headers['Cache-Control'] = 'no-cache'
tmp_filename = "#{RAILS_ROOT}/tmp/tmp_zip_" <<
Time.now.to_f.to_s <<
".zip"
# rubyzip gem version 0.9.1
# rdoc http://rubyzip.sourceforge.net/
Zip::ZipFile.open(tmp_filename, Zip::ZipFile::CREATE) do |zip|
#get all of the attachments
# attempt to get files stored on S3
# FAIL
registrations_with_attachments.each { |e| zip.add("abstracts/#{e.abstract.original_filename}", e.abstract.url(:original, false)) }
# => No such file or directory - http://s3.amazonaws.com/bucket/original/abstract.txt
# Should note that these files in S3 bucket are publicly accessible. No ACL.
# works with local storage. Thanks to Henrik Nyh
# registrations_with_attachments.each { |e| zip.add("abstracts/#{e.abstract.original_filename}", e.abstract.path(:original)) }
end
send_data(File.open(tmp_filename, "rb+").read, :type => 'application/zip', :disposition => 'attachment', :filename => tmp_filename.to_s)
File.delete tmp_filename
}
интересно, если решение здесь использовать камень AWS-S3 в получить все файлы в ведро и не использовать paperclip? – chaserx
Вы почти наверняка хотите использовать to_file() вместо url(). – vladr
Да. Я тоже об этом тоже. Дает эту ошибку. не может конвертировать Paperclip :: Tempfile в String – chaserx