Как загрузить файл через ajax запрос
Статья, которая помогла: https://wp-kama.ru/id_9026/jquery-ajax-zagruzka-fajlov-na-server.html
HTML
<div class="my-2">
<!-- <label for="formFileLg" class="form-label">Загрузка покупателей из файла</label> -->
<input class="form-control form-control" id="customer_file_input" type="file">
</div>
<div class="my-2">
<button class="btn btn-primary" id="create_customers_from_file_button">Загрузить</button>
</div>
JS
<script>
var files;
document.addEventListener("DOMContentLoaded", (event) => {
jQuery('#customer_file_input').on('change', function(){
files = this.files;
});
$("#create_customers_from_file_button").on("click", () => {
uploadFile();
})
});
function uploadFile() {
// ничего не делаем если files пустой
if( typeof files == 'undefined' ) return;
// создадим объект данных формы
var data = new FormData();
// заполняем объект данных файлами в подходящем для отправки формате
$.each( files, function( key, value ){
data.append( 'file_'+key, value );
});
// добавим переменную для идентификации запроса
data.append( 'customers', 1 );
// AJAX запрос
$.ajax({
url : '{{ $url }}',
type : 'POST', // важно!
data : data,
cache : false,
dataType : 'json',
// отключаем обработку передаваемых данных, пусть передаются как есть
processData : false,
// отключаем установку заголовка типа запроса. Так jQuery скажет серверу что это строковой запрос
contentType : false,
// функция успешного ответа сервера
success : function( respond, status, jqXHR ){
// ОК - файлы загружены
if( typeof respond.error === 'undefined' ){
}
// ошибка
else {
console.log('ОШИБКА: ' + respond.data );
}
},
// функция ошибки ответа сервера
error: function( jqXHR, status, errorThrown ){
console.log( 'ОШИБКА AJAX запроса: ' + status, jqXHR );
}
});
}
</script>
Laravel в контроллере
if ($request->hasFile('file_0')) {
info("file is exists");
info($request->file_0->path());
}
Парсим csv файл
$customers = [];
if (($handle = fopen($request->file_0->path(), "r")) !== FALSE) {
while (($data = fgetcsv($handle, null, ";")) !== FALSE) {
$customers[] = $data;
}
fclose($handle);
}
info($customers);
Удалить файл
unlink('storage/app/'.$this->file_url);
Может быть понадобиться увеличить размер загружаемых файлов. На локальной машине по умолчанию было 2мб.
открыть /etc/php/8.2/apache2/php.ini
установить upload_max_filesize = 30M
Перезапустить сервер
sudo systemctl restart apache2
sdf
