Как я могу предотвратить двойную загрузку файлов с Amazon S3? - PullRequest
1 голос
/ 14 июня 2010

Я решил использовать Amazon S3 для хранения документов в приложении, которое я создаю. Одна проблема, с которой я сталкиваюсь, заключается в том, что когда мне нужно загрузить файлы на S3, мне нужно создать объект документа в моем приложении, чтобы мои пользователи могли выполнять действия CRUD.

Одним из решений является возможность двойной загрузки. Пользователь загружает документ на сервер, на котором живет мое приложение Rails. Я проверяю и создаю объект, затем передаю его на S3. Одна из проблем заключается в том, что показатели прогресса становятся более сложными. Использование большинства готовых плагинов покажет клиенту, что файл завершил загрузку, потому что он находится на моем сервере, но тогда будет существенная задержка при передаче файла с моего сервера на S3. Это также вносит ненужную пропускную способность (по крайней мере, это не кажется необходимым)

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

Оба кажутся одинаково грязными.

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

1 Ответ

2 голосов
/ 14 июня 2010

Если нет особой причины не использовать скрепку, я очень рекомендую ее.Используемый в сочетании с отложенной работой и отложенным скрепкой, пользователь загружает файл в файловую систему вашего сервера, где вы выполняете любую необходимую вам проверку.Затем отложенное задание обрабатывается и сохраняется на s3.Действительно, очень легко настроить и улучшить пользовательский опыт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...