Подтвердить что ты не робот

Загрузить: показать сообщение об ошибке из HTTP-ответа

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

file.jpg (52.78KB) - HTTP Error

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

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

4b9b3361

Ответ 1

Взгляните на эти два сообщения в форуме uploadify о том, как обрабатывать ошибки.

onError, чтобы отобразить, что происходит а также Загрузить script отчет об ошибках

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

Обновление

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

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

в сочетании с этой версией uploadify script

<?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;
?>

Ответ 2

К сожалению, событие 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);
        }

Ответ 3

У меня была такая же проблема. после поиска в течение нескольких часов я нашел проблему. Я установил "прокси-сервер" в настройках "Параметры Интернета → Лан", и когда я вернул его в состояние по умолчанию, функция добавления снова работает.

Ответ 4

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

...
'onUploadSuccess' : function(file, data, response) {
    if (response){
        var json_data=JSON.decode(data);
        /* code here */
    }
},
....