Отправка файла post'ом с помощью jQuery
Метод оправки файла без jQuery:
const formData = new FormData();
const fileField = document.querySelector('input[type="file"]');
formData.append('username', 'abc123');
formData.append('avatar', fileField.files[0]);
try {
const response = await fetch('https://example.com/profile/avatar', {
method: 'POST',
body: formData
});
const result = await response.json();
console.log('Успех:', JSON.stringify(result));
} catch (error) {
console.error('Ошибка:', error);
}
Отправка нескольких файлов:
const formData = new FormData();
const photos = document.querySelector('input[type="file"][multiple]');
formData.append('title', 'Мой отпуск в Вегасе');
for (let i = 0; i < photos.files.length; i++) {
formData.append('photos', photos.files[i]);
}
try {
const response = await fetch('https://example.com/posts', {
method: 'POST',
body: formData
});
const result = await response.json();
console.log('Успех:', JSON.stringify(result));
} catch (error) {
console.error('Ошибка:', error);
}
Объект FormData позволяет составить набор пар ключ/значение для отправки при помощи XMLHttpRequest. Это, в первую очередь, предназначено для отправки данных форм, но вы можете использовать этот объект независимо от форм, тогда передаваемые данные будут в том же формате, что и при обычной отправке формы с enctype="multipart/form-data". Но при попытке отправки Объекта FormData через jquery $.ajax возникают проблемы, т.е. запрос придет, но файл вы не получите. Все это из-за 2 параметров которые в jquery ajax включены по умолчанию.
processData: true ; // по умолчанию |
По умолчанию, данные, переданные в параметр data в качестве объекта (с технической точки зрения, что-либо кроме строки), будут обработаны и преобразованы в строку запроса, для соответствия типу данных по умолчанию — «application/x-www-form-urlencoded; charset=UTF-8». Если необходимо отослать документ DOM или другие специфические данные, то установите данную опцию в false.
contentType: true ; // по умолчанию |
При отсылке данных на сервер, указывает тип данных. По умолчанию: «application/x-www-form-urlencoded», что подходит для большинства случаев.
Далее пример отправки файла:
Форма:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<form method= "post" action= "" enctype= "multipart/form-data" > <input type= "text" name= "s_name" /> <label for = "name" >Имя :</label> <input type= "text" name= "name" /> <label for = "mail" >e-mail :</label> <input type= "text" name= "mail" /> <label for = "text" >Сообщение:</label> <textarea name= "text" /> <input type= "file" name= "ava" /> <div id= "submit" >Отправить</div>ev </form> |
Скрипт :
1
2
3
4
5
6
7
8
9
10
11
|
var formData = new FormData($( 'form' )[0]); $.ajax({ type: "POST" , processData: false , contentType: false , url: "some.php" , data: formData }) .done( function ( data ) { }); |