J'ai un téléchargeur qui rejette le téléchargement des utilisateurs lorsqu'ils dépassent leur quota. La réponse est en JSON et est la suivante:
{msg: "Upload limit reached", status: "error", code: "403"}
Les options Dropzone JS sont les suivantes:
Dropzone.options.uploadDropzone = {
paramName: "file1",
maxFilesize: 200,
maxThumbnailFilesize: 10,
success: function(file, response){
????
}
};
Que dois-je faire avec la réponse dans success
pour afficher une erreur à mes utilisateurs dans l'uploader?
ok, ce qui suit fonctionnerait, il suffit d'extraire de la source:
success: function(file, response){
if(response.code == 501){ // succeeded
return file.previewElement.classList.add("dz-success"); // from source
}else if (response.code == 403){ // error
// below is from the source code too
var node, _i, _len, _ref, _results;
var message = response.msg // modify it to your error message
file.previewElement.classList.add("dz-error");
_ref = file.previewElement.querySelectorAll("[data-dz-errormessage]");
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
node = _ref[_i];
_results.Push(node.textContent = message);
}
return _results;
}
}
Dropzone a intégré la détection d'erreurs. Faites ceci:
mydropzone = new Dropzone("#mydropzone",{
url: "/dropzone",
addRemoveLinks : true,
maxFilesize: 2.0,
maxFiles: 100,
error: function(file, response) {
if($.type(response) === "string")
var message = response; //dropzone sends it's own error messages in string
else
var message = response.message;
file.previewElement.classList.add("dz-error");
_ref = file.previewElement.querySelectorAll("[data-dz-errormessage]");
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
node = _ref[_i];
_results.Push(node.textContent = message);
}
return _results;
}
});
Vous pouvez le faire comme ceci:
success: function(file, response, action) {
// PHP server response
if(response == 'success') // Validate whatever you send from the server
{
this.defaultOptions.success(file);
}
else
{
this.defaultOptions.error(file, 'An error occurred!');
}
}
dans PHP side:
header("HTTP/1.0 400 Bad Request");
echo "Error uploading file";
et côté jQuery:
error: function(response){
alert(response.xhr.responseText);
}
Après avoir essayé un mélange des différentes réponses, j'ai compris que la dropzone 5.5 actuelle fonctionnait bien en procédant de cette façon:
Sur PHP, lorsque vous souhaitez lancer une erreur, définissez l'en-tête de 400 avec un texte d'état personnalisé comme ceci:
header('HTTP/1.1 400 Invalid file (test error).');
// no need to echo anything, unless you want more data to parse
Ensuite, ajustez l'option d'erreur de dropzone avec les 3 paramètres complets:
mydropzone = new Dropzone("#mydropzone",{
....
error: function(file, response, xhr) {
console.log('errored',file,response,xhr);// for debugging
if (typeof xhr !== 'undefined') {
this.defaultOptions.error(file,xhr.statusText);// use xhr err (from server)
} else {
this.defaultOptions.error(file,response);// use default (from dropzone)
}
}
});
Cela place ensuite le texte d'erreur dans le framework dz approprié afin qu'il affiche les bons éléments à l'aide de ses commentaires CSS et Hover intégrés.