sql >> Database teknologi >  >> NoSQL >> MongoDB

Sails.js tjekker ting før upload af filer til MongoDB med skipper (gyldige filer, billedstørrelse osv.)

Ok, efter at have rodet med dette et stykke tid, er det lykkedes mig at finde en måde, der ser ud til at fungere.

Det kunne sikkert være bedre, men det gør, hvad jeg vil have det til at gøre nu:

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

},

I stedet for at bruge skipper-gridfs har jeg valgt at bruge lokal fillagring, men ideen forbliver den samme. Igen, det er ikke så komplet, som det burde være endnu, men det er en nem måde at validere simple ting som filtype og størrelse. Hvis nogen har en bedre løsning, så send den gerne :)!



  1. Konverter fra LinkedHashMap til Json String

  2. MongoDB $orderBy

  3. Bigbluebutton opsætning html5 dev klient login til møde med join api call tom html-svar

  4. Hentning af den specifikke MongoDB-nøgle fra DuplicateKeyException, der faktisk blev duplikeret (Java/Spring)