2015-01-06 6 views
0

В моем приложении пользователи будут загружать файлы (маленькие и большие). Мне нравится хранить файл на S3 или FTP или любую другую службу хранения.Каков наилучший способ для асинхронного скачивания файлов в фоновом режиме с помощью PHP?

Мой план состоит в том, чтобы загружать файлы с клиента с помощью AJAX (с индикатором выполнения) на мой PHP-сервер, а затем передавать их в фоновом режиме в целевое хранилище. И я хочу сделать последнюю часть асинхронно (в фоновом режиме). Мне также нужно выполнить некоторые задачи (например, обновление и очистку базы данных) после загрузки файлов с моего сервера на хранение.

Мой предыдущий подход состоял в том, чтобы использовать nohup (что-то вроде: How can I use nohup to run process as a background process in linux?), но у него есть некоторые недостатки, и я предпочитаю не использовать его.

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

+0

Вы пробовали [laravel.io] (http://laravel.io/forum/03-18-2014-best-logic-for-implmenting-upload-progress-bar), которые предлагают использовать загрузку файла jQuery – DouglasDC3

+0

client загрузка не является проблемой. Проблема заключается в загрузке фона с моего PHP-сервера на удаленное хранилище, например S3. – TheJohnny

+0

Использование очередей на самом деле не является решением, поскольку вам все равно нужно отправить весь файл в очередь или сохранить его в месте tmp. Единственное, что вы можете сделать, это сохранить его в местоположении tmp, чем иметь триггер очереди, чтобы загрузить его на S3. – DouglasDC3

ответ

0

Вы можете попробовать попробовать Диспетчер. Взгляните сюда:

https://github.com/Indatus/dispatcher

С сайта: «Диспетчер является инструментом планирования команды Laravel ремесленник используется для планирования ремесленных команд в вашем проекте, поэтому вам не нужно трогать кронтаб при развертывании.»