2016-06-01 13 views
0

Ich habe ein Formular, das ein Benutzer mit oder ohne eine Datei senden kann.Wie gehen Sie mit optionalen Datei-Uploads mit Sails JS um?

Die Form:

<form method="post" action="/file/upload" enctype="multipart/form-data"> 
    <input type="file" name="media" /> 
    <input type="submit" value="Submit" /> 
</form> 

Der Regler

module.exports = { 
    upload: function (req, res) { 
    // Check if any files were uploaded 
    if (!req.file('media')._files[0]) { 
     return res.send('no file given!'); 
    } 

    req.file('media').upload({ 
     dirname: '/tmp/uploads' 
    },function whenDone(err, uploadedFiles) { 
     if (err) { 
     sails.log.error('Error uploading file', err); 
     } 
     res.send('thanks for your file'); 
    }); 
    } 
}; 

Wenn sie laden keine Datei, erhalte ich die folgende Fehlermeldung. Es scheint keinen Weg zu geben, es zu fangen oder zu unterdrücken, wenn ich nicht in den Skipper-Code gehe und das Fehlerwerfen auskommentiere. Wie kann ich das Formular senden, ohne eine Datei anzuhängen und die App nicht zum Absturz zu bringen?

Error: EMAXBUFFER: An Upstream (`NOOP_media`) timed out before it was plugged into a receiver. It was still unused after waiting 4500ms. You can configure this timeout by changing the `maxTimeToBuffer` option. 

Ich habe durch eine Reihe von Foren und Blog-Posts gewesen, aber nichts hat bisher geholfen.

Antwort

0

Sie müssen die Überprüfung innerhalb der .upload() durchführen. Entfernen Sie die if Anweisung.

req.file('media').upload({ 
    dirname: '/tmp/uploads' 
}, function whenDone(err, uploadedFiles) { 
    if(uploadedFiles.length === 0){ // Check the number of files uploaded. 
    return res.send('no file given!'); 
    } 
    if (err) { 
    sails.log.error('Error uploading file', err); 
    } 
    return res.send('thanks for your file'); 
}); 
0

Wenn eine Datei-Eingabe leer bleibt es scheint wie eine normale Texteingabe zu handeln und es wird leer sein, so dass Sie für so etwas wie diese Überprüfung versuchen:

if(typeof req.param('media') !== 'undefined' && req.param('media').length == 0)) { 
     return res.send('no file given!'); 
    }else { //handle the file upload }