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 */
}
},
....