Rails, Heroku, Paperclip и загрузка файлов на S3 - PullRequest
1 голос
/ 31 января 2012

Я работаю над приложением, которое позволит пользователям отправлять zip-файлы размером примерно ~ 5 Мб, как я себе представляю.Затем я возьму эти файлы вручную и поработаю с ними на своем конце.

Я изучаю использование Paperclip, как предлагает heroku для этой задачи - полностью обходя heroku - и просто загружаю в Amazon S3.

Однако теперь, когда я возиться с этим, похоже, что у модели пользователя может быть ОДНО прикрепленное, а не множественное.Есть ли лучшая альтернатива или, возможно, прямой способ просто загрузить на S3, зная мое имя и ключи, и так далее?

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

Ответы [ 4 ]

3 голосов
/ 31 января 2012

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

1 голос
/ 31 января 2012

Скрепка поддерживает неограниченное количество вложений.

Посмотрите на S3 POST API , который потребует некоторые параметры подписи, сгенерированные на вашем сервере, но позволит вам загружать непосредственно в S3. После успешной загрузки на S3 вы должны сделать отдельный запрос, чтобы уведомить ваш сервер heroku о наличии нового вложения и имени файла вложения. Обычно для этого требуется взломать параметр [attachment] _file_name, чтобы избежать ненужной загрузки файла скрепкой повторно.

В целом, я обнаружил, что у Paperclip есть некоторые серьезные недостатки в дизайне, что означает, что он требует неудачного взлома, чтобы хорошо играть с файлами, которые не загружаются через плагин. Я должен был в значительной степени взломать вещь полностью. Для моего следующего проекта я буду искать альтернативу, которая более четко отделяет вложения от моделей и имеет более модульный механизм хранения.

Тем не менее, решение, которое я упомянул, прекрасно работает. Сложность состоит в том, чтобы явно установить поле [attachment] _file_name в модели, чтобы Paperclip решал, что файл уже содержит исходный файл.

0 голосов
/ 31 января 2012

S3 Post API можно использовать, но это покажет ваш секретный ключ в формах, которые довольно уязвимы с точки зрения безопасности.

вам следует использовать прямую загрузку в библиотеку s3 js, чтобы ваш секретный ключ оставался секретным.

Спасибо

0 голосов
/ 31 января 2012

На популярной альтернативе скрепке есть CarrierWave . Когда несколько месяцев назад я просматривал вложения, это было очень рекомендовано.

...