Laravel загружает файлы асинхронно
Я довольно хорошо знаком с Laravel Queues и управляю асинхронной логикой в Laravel, планируя задания.
Веб-сайт, который я создаю, должен обрабатывать большие видеофайлы, поэтому мне нужно, чтобы эти загрузки были асинхронными, теперь пользователи ждут загрузки своего файла от 5 до 10 минут.
Это возможно? Как это будет реализовано в очереди Laravel? Что отправляется на сервер в запросе?
Я не могу найти в Google ничего, что могло бы решить эту проблему, поэтому я просто ищу общие рекомендации.
В идеале пользователь должен выбрать свой файл, щелкнуть кнопку "загрузить", после чего запланировано задание на загрузку файла и уведомление пользователя по электронной почте о завершении.
Спасибо!
1 ответ
Для загрузки файлов страница, которая инициировала загрузку, должна оставаться открытой в течение всего периода загрузки. Это само по себе имеет смысл, потому что в противном случае, если пользователь захочет закрыть страницу в процессе загрузки, вы можете "украсть" загружаемый файл независимо от действий пользователя.
Единственный практический подход здесь - позволить пользователю выбирать файлы и загружать их, используя запрос XHR, что-то вроде:
var payload = new FormData();
payload.append('file', document.getElementById('fileInput'));
var xhr = new XMLHttpRequest();
xhr.open('POST', '/upload', true);
xhr.addEventListener('load', function (e) {
// Do stuff when upload is complete
});
xhr.send(payload);
Загрузка файлов асинхронно, позволяет пользователю выполнять другие действия на той же странице в ожидании завершения загрузки (например, заполнить дополнительные данные, необходимые для загрузки).