Использование Paperclip для прямой загрузки файлов на S3

поэтому у меня есть скрепка, настроенная с помощью uploadify для загрузки вещей на S3. Я сделал свою настройку так, чтобы материал загружался непосредственно на S3, а затем, когда это было сделано, я отправлял результаты на свой веб-сервер...

Все, что я получаю, это имя файла и размер. я должен создать свой собственный процессор или метод before_post_process, чтобы «загрузить» файл с S3, чтобы обработать его? или я что-то упустил, и uploadify должен был предоставить мне поток с файлом внутри него после того, как он был отправлен на S3?

Как вы, ребята, делаете прямую загрузку на S3, а затем уведомляете свою модель, поддерживаемую скрепкой? Вам нужно тянуть файлы с сервера и выполнять их пост-обработку, или скрепка справится со всем этим?


person schone    schedule 18.02.2011    source источник
comment
что значит прямая загрузка? С помощью скрепки загрузка проходит через ваш веб-сервер, верно? Итак, у вас есть файл в памяти или в tmp/. Как/когда вы отправляете результаты на веб-сервер?   -  person oma    schedule 25.05.2011
comment
Не обязательно, вы можете вообще обойти веб-сервер и просто использовать Paperclip для обработки изображений и управления объектами.   -  person iwasrobbed    schedule 27.05.2011


Ответы (2)


Вот пара сообщений в блоге, описывающих, как это сделать...

http://www.railstoolkit.com/posts/uploading-files-directly-to-amazon-s3-using-fancyupload

http://www.railstoolkit.com/posts/fancyupload-amazon-s3-uploader-with-paperclip

Они используют FancyUploader (который использует MooTools/Flash) для прямой загрузки на S3, минуя Heroku и их ужасный 30-секундный тайм-аут запроса вместе, а затем используют DelayedJob для постановки в очередь задач постобработки, таких как создание эскизов, и PaperClip для фактической обработки файла. файлы.

Если я смогу заставить это работать с CarrierWave, я опубликую проект на GitHub, чтобы поделиться им (примерно через неделю, когда у меня будет время).

Обновление:

Пример проекта с использованием Rails 3, Flash и FancyUploader на основе MooTools для прямой загрузки в S3: https://github.com/iwasrobbed/Rails3-S3-Uploader-FancyUploader

Пример проекта с использованием Rails 3, Flash/Silverlight/GoogleGears/BrowserPlus и Plupload на основе jQuery для прямой загрузки в S3: https://github.com/iwasrobbed/Rails3-S3-Uploader-Plupload

Я добавлю пример постобработки, когда у меня будет время.

person iwasrobbed    schedule 27.05.2011
comment
вы не хотите делать это со вспышкой! Кстати, это отлично работает на героку без вспышки, похоже, вы даже не пробовали. - person oma; 27.05.2011
comment
1) Вы не можете использовать загрузчик HTML5 для доступа к S3, так как они еще не разрешают это. У них есть другие загрузчики, такие как plupload, которые вы также можете использовать для загрузки с помощью Silverlight, Google Gears и т. д., если вам не нравится Flash. 2) У меня есть рабочий пример на Heroku с использованием двух разных загрузчиков. Я планирую опубликовать код здесь, как только закончу с ними. 3) Старайтесь быть полезными, а не просто невежливыми. - person iwasrobbed; 27.05.2011
comment
У вас создается впечатление, что загрузка на героку сложна, и нужно другое решение, чем обычная скрепка/несущая волна, что неверно. Это полезно для других, которые в противном случае могут быть введены в заблуждение, выбрав что-то, что им не нужно, IMO. S3 нужны секретные ключи, обход сервера (это цель, верно?) требует, чтобы секрет хранился во флэш-памяти или чем-то еще (есть ли другие варианты?). Я не рекомендую использовать вспышку для этого. - person oma; 27.05.2011
comment
Я думаю, у вас есть неправильное понимание нескольких вещей: 1) Загрузка на Heroku затруднена только для больших файлов, поскольку у Heroku есть 30-секундный тайм-аут запроса, поэтому большие файлы сначала должны пройти через сервер (как в случае с обычной реализацией о Paperclip и CarrierWave) не может быть и речи, поскольку время запроса истекает до завершения загрузки. 2) Вы никогда не делитесь своим секретным ключом (или, по крайней мере, никогда не должны). Вместо этого вы создаете политику S3 с подписью, подписанной вашим секретным ключом, который передается Amazon. - person iwasrobbed; 27.05.2011
comment
Flash никогда не узнает о вашем секретном ключе, потому что вся эта информация содержится в вашем приложении Rails. Вы никогда ничего не выставляете напоказ. Если вы не одобряете Flash только по перечисленным вами причинам, вы можете пересмотреть свое решение. - person iwasrobbed; 27.05.2011
comment
Вы когда-нибудь делали пример постобработки? - person jBeas; 29.09.2012
comment
@jBeas Извините, нет :( Однако об этом есть много информации: github.com/jnicklas /carrierwave/wiki , engineyard.com/ blog/2011/a-gentle-introduction-to-carrierwave , williambharding.com/blog/rails/ - person iwasrobbed; 29.09.2012

Вы можете либо создать процессор, либо использовать методы обратного вызова, но файл обязательно будет на вашем сервере перед переходом на S3.

Например, если вы находитесь в методе обратного вызова, вы можете получить к нему доступ, используя что-то вроде:

self.file.to_file

После завершения обработки и загрузки файл будет удален с вашего сервера. Вам не нужно ничего делать, чтобы уведомить или опубликовать процесс. Скрепка справится с этим.

person Diego    schedule 26.05.2011