2009-12-09 6 views
18

Si le serveur renvoie une erreur lors du téléchargement d'un fichier avec Uploadify, le fichier téléchargé obtient un fond rouge et un message est de montrer comme ceci:Uploadify: (! Code de réponse HTTP = 200) affichera un message d'erreur de réponse HTTP

file.jpg (52.78KB) - HTTP Error 

indiquant qu'il y avait une erreur HTTP. Mais ce n'est pas très utile à l'utilisateur. Comment puis-je afficher un message d'erreur plus détaillé? Comme: "Pas une image valide" ou "Quota complet"?

Je pensais transmettre ces messages dans le corps de la réponse HTTP, mais Uploadify ne les récupère pas. Existe-t-il un moyen connu de renvoyer les messages d'erreur à Uploadify?

Répondre

9

Jetez un oeil à ces deux postes dans le forum Uploadify sur la façon de gérer les erreurs

onError to display what's happening et Upload script error reporting

il y a beaucoup d'informations utiles là-bas ..

Mise à jour

Ce qui suit semble faire e truc pour moi ..

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

couplé avec cette version du script Uploadify

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

Il ne semble pas y avoir moyen d'accéder au corps de la réponse HTTP. Fournir ainsi des messages d'erreur plus utiles du serveur dans la sortie est inutile, puisque vous ne pouvez pas les afficher. – hopla

+0

ajouté une version qui fonctionne pour moi .. –

+1

Ok, je le vois maintenant ... Seul onComplete a accès au corps de la réponse. onError n'a pas mais c'est là que j'ai regardé, puisque je voulais montrer des informations supplémentaires, vous savez, * en cas d'erreurs *. Mais apparemment onComplete aussi des incendies pour des erreurs? Nous permettant ainsi d'atteindre le corps de la réponse. Pourquoi le développeur de Uploadify ne s'est pas contenté de passer la réponse à la fonction onError et me dépasse ... – hopla

1

Pour la version 3.0+ Uploadify jeter un oeil à l'option onUploadSuccess - en particulier la variable passée en paramètre le nom des données - que aura tout ce que le serveur a fait écho. Si vous écho JSON pensez à le décoder comme ceci:

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

Est-ce que cela se déclenche également lorsque les données ont été téléchargées, mais le serveur a répondu avec un code d'erreur HTTP non 200? – hopla

+0

@hopla Je ne pense pas, plutôt seulement sur une réponse 200. Je crois que non 200 codes HTTP pourraient être interceptés avec la méthode [onUploadError] (http://www.uploadify.com/documentation/uploadify/onuploaderror/) – site

+1

@Site, l'événement onUploadError n'a pas accès au corps de réponse. Est-ce que quelqu'un a résolu cela? – RayLoveless

4

Malheureusement l'événement onUploadError n'a pas accès au corps de Reponse. Vous devrez retourner le statut 200 et gérer les erreurs dans onUploadSuccess autant que je sache.

Voici comment je fais:

'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; 
      } 
     } 

Ou mieux encore vous pouvez remplacer le message « complet » avec votre message d'erreur comme ceci:

'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); 
     } 
2

J'ai eu le même problème. Après avoir cherché des heures, j'ai trouvé le problème. J'ai mis "proxy server" dans mon "Internet Options-> Lan setting", et quand je l'ai renvoyé à l'état par défaut, uploadify a travaillé à nouveau.

+2

Il ne s'agit pas de télécharger ou de ne pas travailler. – hopla

+1

Vous n'avez pas vérifié, n'est-ce pas? essayez d'utiliser uploadify pendant que vous avez défini le proxy [mauvais proxy], j'ai vérifié, uploadify n'a pas fonctionné. 100% c'est lié, peut-être que votre problème était avec votre code, mais le mien était à cause de proxy. –

+0

Ooh désolé, vous avez raison. Je l'ai essayé sans proxy et maintenant je reçois totalement le message d'erreur de la réponse HTTP. Mon proxy (inexistant) doit avoir totalement mangé ce message lors de mes premiers tests! – hopla