@Abmin

Как в PHP принять объект с файлом?

Передаю изображения и текст из формы. В форме может быть 30-40 изображений например и какой то текст. Не могу в PHP принять изображения правильно.

Вот как отправляется изображение например:
35da906dac9644bb9645c32bc2ee8a01.png

В форме у меня может быть несколько полей с name="file1", несколько с name="file2" и т.д., по этому отправляю объектами.
$.each($("[name=file"+i+"]"), function(i, obj){
			$.each(obj.files,function(i,file){
				$.ajax({
					url:'send.php',
					type:'POST',
					data: 'file1='+file,
					enctype:'multipart/form-data',
					processData:false,
					contentType:false,
					success:function(str){
						arr.push(file);
						arr.push("Фото: "+str);
					}, error: function (data) {
						console.log('error');
					}
				});
			})
		});

<input type="file" name="file1" value="">
  • Вопрос задан
  • 907 просмотров
Решения вопроса 1
ArtamonovDenis
@ArtamonovDenis
Full-stack developer
Чтобы сформировался $_FILES - нужно чтобы произошёл submit формы - только тогда в send.php получится поймать массив $_FILES

Есть несколько решений:
1. перед отправкой ajax создать объект Формы и уже его отослать на send.php - в этом случае $_FILES будет сформирован - FormData
Статья

2. с помощью js-функции FileReader получить base64 этих файлов и отправить на send.php, далее, через php сформировать файлы
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
copist
@copist
Empower people to give
Отправлять файл черех AJAX - не простая задача. Есть несколько способов. Самый простой - если используются современные браузеры - использовать объект FormData. Этот JS класс умеет преобразовывать поля разного типа, включая file.

<form id="form" action="send.php" method="post" enctype="multipart/form-data">
<input type="file" name="UploadForm[attachment][]" multiple="">
<button type="submit" class="btn btn-primary input-lg">Submit</button>
</form>


$.ajax({
    url: "send.php",
    data: new FormData($('#form').get(0)),
    cache: false,
    contentType: false,
    processData: false,
    type: 'POST',
    error: function(jqXHR, textStatus, errorThrown) { /** @var jqXHR jqXHR */
        console.log('error', textStatus, errorThrown);
    },
    success: function(data, textStatus, jqXHR) { /** @var jqXHR jqXHR */
        console.log('success', data);
    }
});


Рабочий пример: форма с аттачментами отправляется через AJAX (кнопка в подвале страницы, извиняюсь)

Варианты без FormData описаны в статье https://blog.arvixe.com/how-to-send-multipart-data...
Я раньше пользовался фреймами, а потом перешёл на библиотеку www.dropzonejs.com - она сама подбирает вариант в зависимости от возможностей браузера.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы