sql >> Database >  >> NoSQL >> MongoDB

Sails.js controleert dingen voordat bestanden worden geüpload naar MongoDB met schipper (geldige bestanden, formaat wijzigen van afbeeldingen, enz.)

Ok, na een tijdje prutsen ben ik erin geslaagd een manier te vinden die lijkt te werken.

Het zou waarschijnlijk beter kunnen, maar het doet wat ik wil dat het doet:

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(' - ')
        });
    }

},

In plaats van skipper-gridfs te gebruiken, heb ik ervoor gekozen om lokale bestandsopslag te gebruiken, maar het idee blijft hetzelfde. Nogmaals, het is nog niet zo compleet als het zou moeten zijn, maar het is een gemakkelijke manier om eenvoudige dingen zoals bestandstype en grootte te valideren. Als iemand een betere oplossing heeft, post het dan :)!



  1. ontvang de huidige datum en tijd in lua in redis

  2. Mongoose.js-query's synchroon laten lopen

  3. Geneste array in mangoest vullen

  4. Hoe twitter en facebook api-achtige cursorgebaseerde paginering in mongodb in nodejs te implementeren met behulp van de officiële mongodb-client?