@s1mypj
Начинающий web-программист.

Почему не создаёт файл при ajax отправки?

Доброй ночи, сделал ajax обработку файлов для отправки.
Файлы отправляются - приходит подтверждение от ajax`a
Но вот код отправки:
$('#postnews').click(function(event) {
		event.preventDefault();
		var url = '...';
		var data = $('form#news__form').serialize();
		var file_data = $('#newsimg').prop('files');
		var form_data = new FormData();
		form_data.append('file', file_data);
		$.ajax({
			url: url,
			type: 'POST',
			dataType: 'text',
			data: {data: data, formData: form_data},
			cache:false, // В запросах POST отключено по умолчанию, но перестрахуемся
		    contentType: false, // Тип кодирования данных мы задали в форме, это отключим
		    processData: false, // Отключаем, так как передаем файл
		})
		.done(function() {
			$('.successful').slideDown();
			setTimeout(function(){
				$('.successful').slideUp();
			}, 2500)
			$('#news__form')[0].reset();
		})
		.fail(function() {
			$('.nsuccessful').slideDown();
			setTimeout(function(){
				$('.nsuccessful').slideUp();
			}, 2500)
		});
		setTimeout(function(){
			location.reload();	
		}, 2650)
		
	});

Обработку php сделал быструю, ибо файлы будет загружать админ:
if(isset($_FILES)) {
 
  //Переданный массив сохраняем в переменной
  $image = $_FILES['image'];
 
  // Проверяем размер файла и если он превышает заданный размер
  // завершаем выполнение скрипта и выводим ошибку
  if ($image['size'] > 200000) {
    die('error');
  }
 
  // Достаем формат изображения
  $imageFormat = explode('.', $image['name']);
  $imageFormat = $imageFormat[1];
 
  // Генерируем новое имя для изображения. Можно сохранить и со старым
  // но это не рекомендуется делать
  $imageFullName = '/newsprev/' . hash('crc32',time()) . '.' . $imageFormat;
 
  // Сохраняем тип изображения в переменную
  $imageType = $image['type'];
 
  // Сверяем доступные форматы изображений, если изображение соответствует,
  // копируем изображение в папку images
  if ($imageType == 'image/jpeg' || $imageType == 'image/png') {
    if (move_uploaded_file($image['tmp_name'],$imageFullName)) {
      echo 'success';
    } else {
      echo 'error';
    }
  }
}

Но почему то файл в директории "/newsprev/" не создаётся, права дал на запись и чтение - 766
В форме тоже не мог допустить ошибку:
<form method="POST" class="s1_news__form" id="news__form" ENCTYPE="multipart/form-data">
		<label for="newstitle">
			<span class="news__title">Заголовок новости</span>
			<input type="text" name="newstitle" id="newstitle">
		</label>
		<label for="news">
			<span class="news__title">Содержание новости</span>
			<textarea name="news" id="news" cols="30" rows="10"></textarea>
		</label>
		<label for="newsimg">
			<span class="news__title">Добавить фото</span>
			<input type="file" name="newsimg" id="newsimg">
		</label>
		<label for="postnews">
			<input type="submit" name="postnews" id="postnews" placeholder="Опубликовать">
		</label>
	</form>
  • Вопрос задан
  • 57 просмотров
Решения вопроса 1
Скорее всего, не хватает прав на создание файла, поставьте скрипту права 666.
upd: Увидел про права, нужен лог php.
var_dump(move_uploaded_file($image['tmp_name'],$imageFullName));
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
1) done(function() будет выполняться при любом исходе, если сервер вернул код 200. Так что это не говорит о том что на пхп все прошло нормально, только о том что скрипт отработал.

2)
$imageFullName = '/newsprev/' . hash('crc32',time()) . '.' . $imageFormat;
У вас что, прям в корне линуксовой системы есть папка /newsprev? Рили?

3) Логи смотрите, там вы скорее всего найдете варнинг что папки в которую вы пытаетесь записать нету.

4) form_data.append('file', file_data);
...
$image = $_FILES['image'];
Вы бы определились...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы