@kickass77

Почему не срабатывает загрузка файла по drag n drop?

<?

/*$uploaddir = getcwd().DIRECTORY_SEPARATOR.'upload'.DIRECTORY_SEPARATOR;
print_r($uploaddir);
$uploadfile = $uploaddir.basename($_FILES['file']['name']);

move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile);
*/

$arr_file_types = ['image/png', 'image/gif', 'image/jpg', 'image/jpeg'];

if(!(in_array($_FILES['file']['type'], $arr_file_types))) {
    echo 'false';
    return;
}

if(!file_exists('uploads')) {
    mkdir('uploads', 0777);
}

$uploadfile = time() . '_' . $_FILES['file']['name'];
$uploadfile = $uploaddir.basename($_FILES['file']['name']);

move_upload_file($_FILES['file']['tmp_name'], $uploadfile);

?>


<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
    
  <title>HTML5 Drag and Drop загрузка файлов</title>  
  <link rel="stylesheet" href="/style.css">
    
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
  <script src="/script.js"></script>
</head>

<body>
    
    <form action="/upload.php">
      <div id="dropZone">
        Для загрузки, перетащите файл сюда.
      </div>
    </form>
  
</body>
</html>


$(document).ready(function() {
    
    var dropZone = $('#dropZone'),
        maxFileSize = 1000000; // максимальный размер фалйа - 1 мб.
    
    // Проверка поддержки браузером
    if (typeof(window.FileReader) == 'undefined') {
        dropZone.text('Не поддерживается браузером!');
        dropZone.addClass('error');
    }
    
    // Добавляем класс hover при наведении
    dropZone[0].ondragover = function() {
        dropZone.addClass('hover');
        return false;
    };
    
    // Убираем класс hover
    dropZone[0].ondragleave = function() {
        dropZone.removeClass('hover');
        return false;
    };
    
    // Обрабатываем событие Drop
    dropZone[0].ondrop = function(event) {
        event.preventDefault();
        dropZone.removeClass('hover');
        dropZone.addClass('drop');
        
        var file = event.dataTransfer.files[0];
        
        // Проверяем размер файла
        if (file.size > maxFileSize) {
            dropZone.text('Файл слишком большой!');
            dropZone.addClass('error');
            return false;
        }
        
        // Создаем запрос
        var xhr = new XMLHttpRequest();
        xhr.upload.addEventListener('progress', uploadProgress, false);
        xhr.onreadystatechange = stateChange;
        xhr.open('POST', '/upload.php');
        xhr.setRequestHeader('X-FILE-NAME', file.name);
        xhr.send(file);
    };
    
    // Показываем процент загрузки
    function uploadProgress(event) {
        var percent = parseInt(event.loaded / event.total * 100);
        dropZone.text('Загрузка: ' + percent + '%');
    }
    
    // Пост обрабочик
    function stateChange(event) {
        if (event.target.readyState == 4) {
            if (event.target.status == 200) {
                dropZone.text('Загрузка успешно завершена!');
            } else {
                dropZone.text('Произошла ошибка!');
                dropZone.addClass('error');
            }
        }
    }
    
});


по XHR вижу, что все ок, но файл так и не появляется в каталоге :(
  • Вопрос задан
  • 120 просмотров
Пригласить эксперта
Ответы на вопрос 2
@galaxy
А почему вы думаете, что файл попадет в $_FILES?
Туда попадают только файлы, отправленные через форму, т.е. через механизм кодирования multipart/form-data. А вы шлете просто сырые данные файла.

Используйте FormData
Ответ написан
Комментировать
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
Бюро Цифровых Технологий Санкт-Петербург
от 120 000 до 180 000 ₽
03 мая 2024, в 21:00
5000 руб./за проект
03 мая 2024, в 20:41
15000 руб./за проект
03 мая 2024, в 20:03
5000 руб./за проект