Мне нужно загрузить файлы изображений и видео на сервер в приложении Angular, используя Laravel 5.1 в качестве серверной части. Все Ajax-запросы должны сначала идти к контроллеру Laravel, и у нас есть код для обработки файла, когда он туда попадает. Раньше мы делали обычные HTML-формы для отправки файлов на контроллер, но в этом случае нам нужно избегать обновления страницы формы, поэтому я пытаюсь сделать это в Ajax через Angular.
Какую информацию мне нужно отправить на контроллер Laravel с помощью Ajax, которая ранее отправлялась на контроллер через HTML-форму?
Это код в контроллере Laravel, который обрабатывает информацию о файле, как только она туда попадает. Это то, что мне нужно, чтобы выяснить, как отправить, поэтому я надеюсь, что смогу повторно использовать этот код:
$promotion = Promotion::find($id);
if (Input::hasFile('img_path')){
$path = public_path().'/images/promotion/'.$id.'/';
$file_path = $path.'promotion.png';
$delete = File::delete($file_path);
$file = Input::file('img_path');
$uploadSuccess = $file->move($path, 'promotion.png');
$promotion->img_path = '/images/promotion/'.$id.'/promotion.png';
}
if (Input::hasFile('video_path')){
$path = public_path().'/video/promotion/'.$id.'/';
$file_path = $path.'promotion.mp4';
$delete = File::delete($file_path);
$file = Input::file('video_path');
$uploadSuccess = $file->move($path, 'promotion.mp4');
$promotion->video_path = '/video/promotion/'.$id.'/promotion.mp4';
}
Как вы можете видеть выше, мы конвертируем любой полученный файл в PNG с именем файла Promotion.png, чтобы его было легко получить, и мы принимаем только формат видео .mp4. Из-за этого нам не нужно беспокоиться о том, существует ли файл и можно ли его перезаписать. Вот почему вы можете видеть в коде, что мы удаляем любой существующий файл с таким именем перед сохранением.
HTML был просто вводом типа «файл:
<input type="file" id="img_path" name="img_path" class="promo-img-path" accept="image/*">
Сейчас мы используем Angular, поэтому я больше не могу просто отправить это через HTML-форму. Вот что мне нужно, чтобы понять, как это сделать.
Мы два разработчика, которые просто делают все возможное, поэтому я уверен, что есть лучший способ сделать это. Однако, прежде чем я рефакторинг всего этого, я надеюсь, что смогу использовать Angular (или jQuery в крайнем случае), чтобы просто отправить контроллеру любые данные файла, которые нужны Laravel, чтобы приведенный выше код работал. Ответ может быть таким же простым, как «отправить PUT методу в этом контроллере выше, но вместо обычной полезной нагрузки JSON используйте информацию о файле в этом формате, и вы можете собрать эту информацию с помощью…»
Я также был бы признателен за любые советы о том, как лучше я могу сделать это в будущем.