sql >> Databasteknik >  >> NoSQL >> MongoDB

Sails.js kontrollerar saker innan du laddar upp filer till MongoDB med skipper (giltiga filer, bildstorlek etc)

Ok, efter att ha krånglat med det här ett tag har jag lyckats hitta ett sätt som verkar fungera.

Det kan förmodligen vara bättre, men det gör vad jag vill att det ska göra för tillfället:

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

},

Istället för att använda skipper-gridfs har jag valt att använda lokal fillagring, men idén förblir densamma. Återigen, det är inte så komplett som det borde vara ännu, men det är ett enkelt sätt att validera enkla saker som filtyp och storlek. Om någon har en bättre lösning, snälla posta den :)!



  1. Problem med att installera Mongodb på Ubuntu 20.04

  2. MongoDB C++, Hur man lägger till ISODate-värde när man infogar

  3. Hur man lägger till index i mongoDB-projekt med Morphia-ramverket

  4. Finns det något sätt att visa tidsstämpel i unix-format till ISODate?