MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Sails.js überprüft Dinge vor dem Hochladen von Dateien in MongoDB mit Skipper (gültige Dateien, Bildgrößenänderung usw.)

Ok, nachdem ich eine Weile damit herumgespielt habe, habe ich es geschafft, einen Weg zu finden, der zu funktionieren scheint.

Es könnte wahrscheinlich besser sein, aber es tut im Moment, was ich will:

upload: function(req, res) {
    var upload = req.file('file')._files[0].stream,
        headers = upload.headers,
        byteCount = upload.byteCount,
        validated = true,
        errorMessages = [],
        fileParams = {},
        settings = {
            allowedTypes: ['image/jpeg', 'image/png'],
            maxBytes: 100 * 1024 * 1024
        };

    // Check file type
    if (_.indexOf(settings.allowedTypes, headers['content-type']) === -1) {
        validated = false;
        errorMessages.push('Wrong filetype (' + headers['content-type'] + ').');
    }
    // Check file size
    if (byteCount > settings.maxBytes) {
        validated = false;
        errorMessages.push('Filesize exceeded: ' + byteCount + '/' + settings.maxBytes + '.');
    }

    // Upload the file.
    if (validated) {
        sails.log.verbose(__filename + ':' + __line + ' [File validated: starting upload.]');

        // First upload the file
        req.file('file').upload({}, function(err, files) {
            if (err) {
                return res.serverError(err);
            }

            fileParams = {
                fileName: files[0].fd.split('/').pop().split('.').shift(),
                extension: files[0].fd.split('.').pop(),
                originalName: upload.filename,
                contentType: files[0].type,
                fileSize: files[0].size,
                uploadedBy: req.userID
            };

            // Create a File model.
            File.create(fileParams, function(err, newFile) {
                if (err) {
                    return res.serverError(err);
                }
                return res.json(200, {
                    message: files.length + ' file(s) uploaded successfully!',
                    file: newFile
                });
            });
        });
    } else {
        sails.log.verbose(__filename + ':' + __line + ' [File not uploaded: ', errorMessages.join(' - ') + ']');

        return res.json(400, {
            message: 'File not uploaded: ' + errorMessages.join(' - ')
        });
    }

},

Anstatt Skipper-Gridfs zu verwenden, habe ich mich für die lokale Dateispeicherung entschieden, aber die Idee bleibt dieselbe. Auch hier ist es noch nicht so vollständig, wie es sein sollte, aber es ist eine einfache Möglichkeit, einfache Dinge wie Dateityp und Größe zu validieren. Wenn jemand eine bessere Lösung hat, bitte posten :)!