2015-10-19 1 views
0

J'essaie de vérifier si l'utilisateur a effectivement choisi un fichier avant d'appuyer sur le téléchargement ou non, si c'est le cas, puis vérifiez si le fichier est plus grand que 4 MB Si l'utilisateur a appuyé sur le téléchargement sans choisir un fichier, un message devrait lui être envoyé pour lui demander de revenir en arrière et de choisir un fichier. Mais ce code ne semble pas fonctionner.Comment vérifier l'entrée du fichier pour savoir s'il est vide dans node.js

<div id="postUpload-wrapper"> 
 
    <form id="uploadpost-form" action="/uploadpost" enctype="multipart/form-data" method="POST"> 
 
    <input type="text" id="postname" placeholder="Title" name="postname"> 
 
    <br> 
 
    <input id="fileupload" type="file" name="image"> 
 
    <br> 
 
    <input type="submit" id "uploadpost-btn" value="Upload" name="uploadpost"> 
 
    </form> 
 
</div>

//UPLOAD A POST 

router.post('/uploadpost', upload.single('image'), function(req, res){ 
var errors = ""; 

if(req.body.postname === ""){ 
    errors += "Write a title"; 
    res.send(errors); 
    return false; 
} 

//problem here 
if(req.file.size === 0){ 
    errors += "You need to choose a file"; 
    res.send(errors); 
    return false; 
}else{ 
    if(req.file.size > 4000000){ 
     errors += "Files can only be up to 4 MB in size"; 
     res.send(errors); 
     return false; 
    } 
} 
+0

Pourquoi ne pas vérifier sur le côté client? –

Répondre

1

Essayez le réglage input type="submit" élément propriété disabled-"true", utilisez événement onchange de l'élément input type="file" pour vérifier si le fichier sélectionné à l'utilisateur FileList objet, définissez l'élément type="submit"-disabled="true", disabled="false" si file.size supérieur à 4000000 octets. Si le fichier non sélectionné, la taille du fichier sur 4000000 octets bouton SOUMETTRE réglé sur Désactivé

var input = document.getElementById("fileupload"); 
 
input.onchange = function() { 
 
    var file = this.files, submit = this.nextElementSibling.nextElementSibling; 
 
    if (file.length > 0) { 
 
    if (file[0].size >= 4000000) { 
 
     submit.disabled = true; 
 
     alert("file size limit") 
 
    } else { 
 
     submit.disabled = false; 
 
     console.log(this.files) 
 
    } 
 
    } 
 
}
<div id="postUpload-wrapper"> 
 
    <form id="uploadpost-form" action="/uploadpost" enctype="multipart/form-data" method="POST"> 
 
    <input type="text" id="postname" placeholder="Title" name="postname"> 
 
    <br> 
 
    <input id="fileupload" type="file" name="image"> 
 
    <br> 
 
    <input type="submit" id="uploadpost-btn" value="Upload" name="uploadpost" disabled="true"> 
 
    </form> 
 
</div>

+1

Votre réponse est vraiment géniale même si ça ne marche pas vraiment: D mais ça m'a donné une idée. Tout d'abord, au lieu du bloc de code 'if (file> 0)' qui est censé vérifier la taille. J'ai trouvé mieux de vérifier la longueur, en utilisant 'elementID.files.length'. Si c'est 0 alors aucun fichier n'a été choisi, si 1 alors un fichier a déjà été choisi. Deuxièmement, pour vérifier la taille en premier lieu, il faut écrire 'elementID.files [0] .size' pour obtenir la taille en octets. Donc, dans mon code, j'ai d'abord vérifié la longueur. Si c'est 0 alors submit.disabled reste vrai, sinon je vérifie la taille et fais ce qui reste à faire. –

+0

@TonyLee Oui, manqué y compris '.length',' [0] .size' à la poste; actualisé – guest271314

0

Je crois que vous devriez vérifier sur le côté client avant d'autoriser le fichier à télécharger.

if(document.getElementById("uploadpost-btn").value != "") { 
    // you have a file 
} 

Vous pouvez vérifier ultérieurement sur le serveur. Si req.body contient des données, un fichier a été téléchargé.