Je voudrais retourner une erreur sur un cas de mon code php qui gère le téléchargement.

Actuellement, si le téléchargement php échoue, le JS pense toujours qu'il réussit, ce qui, je présume, est lié au fait qu'il est bien revenu.

J'ai essayé de renvoyer false au lieu d'une chaîne mais qui exécute toujours la fonction this.on ('success').

PHP

public function imageUpload(){
    //Сheck that we have a file

    if((!empty($_FILES["file"])) && ($_FILES['file']['error'] == 0)) {

      //Check if the file is JPEG image and it's size is less than 350Kb
      $filename = basename($_FILES['file']['name']);
      $ext = substr($filename, strrpos($filename, '.') + 1);

      if (($ext == "jpg") && ($_FILES["file"]["type"] == "image/jpeg") && 
        ($_FILES["file"]["size"] < 3500000)) {

        //Determine the path to which we want to save this file
          $newname = '/home/anglicvw/public_html/newdev/app/templates/default/images/testimages/'.$filename;
          //Check if the file with the same name is already exists on the server

          if (!file_exists($newname)) {

            //Attempt to move the uploaded file to it's new place
            if ((move_uploaded_file($_FILES['file']['tmp_name'],$newname))) {
               echo "It's done! The file has been saved as: ".$newname;
            } else {
               echo "Error: A problem occurred during file upload!";
            }
          } else {
             echo "Error: File ".$_FILES["file"]["name"]." already exists";
          }
      } else {
         echo "Error: Only .jpg images under 350Kb are accepted for upload";
      }
    } else {
     echo "Error: No file uploaded";
    }
}

JS

$(document).ready(function(){

            Dropzone.autoDiscover = false;

            var myDropzone = new Dropzone('div#imagesdropzone', { url: '/admin/imageUpload',
            parallelUploads: 100,
            maxFiles: 100,});
        });

        Dropzone.options.imagesdropzone = {
            init: function() {
                this.on('success', function( file, resp ){
                  console.log( file );
                  console.log( resp );
                });
                this.on('error', function( e ){
                  console.log('erors and stuff');
                  console.log( e );
                });
            }
        };
3
Daniel Wood 8 mars 2016 à 09:03

3 réponses

Meilleure réponse

Oui c'est vrai. Vous devez définir un en-tête HTTP. Jettes un coup d'oeil à:

https://github.com/enyo/dropzone/wiki/FAQ#how-to-show-an-error-returned-by-the-server

Si vous avez une erreur HTTP et que vous souhaitez l'afficher dans le message d'erreur de survol de DropzoneJS, vous pouvez:

myDropzone.on("error", function(file, message, xhr) {
    var header = xhr.status+": "+xhr.statusText;
    $(file.previewElement).find('.dz-error-message').text(header);
  });

(Vous avez besoin de jQuery pour ce code [$().find();])

L'autre façon serait de renvoyer un message d'erreur JSON via PHP:

//define text for error message
$output['error'] = 'No Token';

//return right HTTP code
if( $error ){
    http_response_code (401);
}
else{
    http_response_code (200);
}

//set Content-Type to JSON
header( 'Content-Type: application/json; charset=utf-8' );
//echo error message as JSON
echo json_encode( $output );
6
KIMB-technologies 15 mars 2016 à 09:14

Utilisez l'extrait de code php ci-dessous

public function imageUpload(){
    //Сheck that we have a file

    if((!empty($_FILES["file"])) && ($_FILES['file']['error'] == 0)) {

      //Check if the file is JPEG image and it's size is less than 350Kb
      $filename = basename($_FILES['file']['name']);
      $ext = substr($filename, strrpos($filename, '.') + 1);

      if (($ext == "jpg") && ($_FILES["file"]["type"] == "image/jpeg") && 
        ($_FILES["file"]["size"] < 3500000)) {

        //Determine the path to which we want to save this file
          $newname = '/home/anglicvw/public_html/newdev/app/templates/default/images/testimages/'.$filename;
          //Check if the file with the same name is already exists on the server

          if (!file_exists($newname)) {

            //Attempt to move the uploaded file to it's new place
            if ((move_uploaded_file($_FILES['file']['tmp_name'],$newname))) {
               echo "It's done! The file has been saved as: ".$newname;
            } else {
               header('Error: A problem occurred during file upload!', true, 500);
               //echo "Error: A problem occurred during file upload!";
            }
          } else {
            header("Error: File ".$_FILES["file"]["name"]." already exists", true, 500);
             //echo "Error: File ".$_FILES["file"]["name"]." already exists";
          }
      } else {
        header("Error: Only .jpg images under 350Kb are accepted for upload", true, 500);
         //echo "Error: Only .jpg images under 350Kb are accepted for upload";
      }
    } else {
      header("Error: No file uploaded", true, 500);
     //echo "Error: No file uploaded";
    }
}
0
Durgaprasad Budhwani 8 mars 2016 à 06:19

this.on('success') prend-il les informations sur le succès / l'échec du processus de téléchargement PHP (interne)?

Je suppose d'après le code d'état de l'en-tête HTTP, qui est 200 (OK) même si le téléchargement a échoué (il imprime simplement du texte d'erreur). Je vous recommande de définir un en-tête 500 si le téléchargement échoue.

0
tihox1 8 mars 2016 à 06:15