Uploadify: показать сообщение об ошибке из ответа HTTP

Если сервер возвращает ошибку (код ответа HTTP!= 200) при загрузке файла с помощью Uploadify, загруженный файл получает красный фон, и сообщение отображается так:

file.jpg (52.78KB) - HTTP Error

показывая, что произошла ошибка HTTP. Но это не очень полезно для пользователя. Как я могу заставить его показать более подробное сообщение об ошибке? Например: "Недействительное изображение" или "Квота заполнена"?

Я думал о передаче этих сообщений в теле ответа HTTP, но Uploadify не принимает их. Есть ли известный способ передачи сообщений об ошибках в Uploadify?

4 ответа

Посмотрите на эти два сообщения на форуме uploadify о том, как обрабатывать ошибки

onError для отображения происходящего и отправки отчетов об ошибках скрипта

там много полезной информации..

Обновить

Следующее, кажется, делает трюк для меня..

'onComplete': function(a, b, c, d, e){
                    if (d !== '1')
                        {
                        alert(d);
                        }
                    else
                        {
                        alert('Filename: ' + c.name + ' was uploaded');
                        }
                  }

в сочетании с этой версией скрипта загрузки

<?php

    if (!empty($_FILES)) 
    {
        $tempFile = $_FILES['userfile']['tmp_name'];

        $targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';
        $targetFile =  str_replace('//','/',$targetPath) . $_FILES['userfile']['name'];

        move_uploaded_file($tempFile,$targetFile);

        switch ($_FILES['userfile']['error'])
        {     
            case 0:
             $msg = ""; // comment this out if you don't want a message to appear on success.
             break;
            case 1:
              $msg = "The file is bigger than this PHP installation allows";
              break;
            case 2:
              $msg = "The file is bigger than this form allows";
              break;
            case 3:
              $msg = "Only part of the file was uploaded";
              break;
            case 4:
             $msg = "No file was uploaded";
              break;
            case 6:
             $msg = "Missing a temporary folder";
              break;
            case 7:
             $msg = "Failed to write file to disk";
             break;
            case 8:
             $msg = "File upload stopped by extension";
             break;
            default:
            $msg = "unknown error ".$_FILES['userfile']['error'];
            break;
        }
    }
    if ($msg)
        { $stringData = "Error: ".$_FILES['userfile']['error']." Error Info: ".$msg; }
    else
        { $stringData = "1"; } // This is required for onComplete to fire on Mac OSX
    echo $stringData;
?>

К сожалению, событие onUploadError не имеет доступа к телу ответа. Насколько я знаю, вам придется вернуть 200 статусов и обработать ошибки в onUploadSuccess.

Вот как я это делаю:

'onUploadSuccess' : function(file, data, response) {
            var responseObj = JSON.parse(data);
            if(responseObj.error_message)
            {
                $("#" + file.id).hide();   // this will hide the misleading "complete" message..
                alert(responseObj.error_message);
                return;
            }
        }

Или, что еще лучше, вы можете заменить сообщение "complete" на ваше сообщение об ошибке следующим образом:

 'onUploadSuccess' : function(file, data, response) {
            var responseObj = JSON.parse(data);
            if(responseObj.error_message)
            {
                $("#" + file.id).find('.data').css('color', 'red').html(' - ' + responseObj.error_message);
                return;
            }
            console.log(file, data, response);
        }

У меня была такая же проблема. после поиска по часам я обнаружил проблему. Я установил "прокси-сервер" в "Настройках Интернета -> Настройка локальной сети", и когда я вернул его в состояние по умолчанию, uploadify снова заработал.

Для загрузки версии 3.0+ обратите внимание на опцию onUploadSuccess, в частности переданную переменную с именем data, которая будет иметь то, что сервер повторял. Если вы повторяете JSON, не забудьте декодировать его так:

...
'onUploadSuccess' : function(file, data, response) {
    if (response){
        var json_data=JSON.decode(data);
        /* code here */
    }
},
....
Другие вопросы по тегам