sql >> Databáze >  >> NoSQL >> MongoDB

Kontrola Sails.js před nahráním souborů do MongoDB pomocí skipperu (platné soubory, změna velikosti obrázku atd.)

Dobře, po chvíli, kdy jsem si s tím pohrával, se mi podařilo najít způsob, který, jak se zdá, funguje.

Pravděpodobně by to mohlo být lepší, ale zatím to dělá to, co chci:

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

},

Místo použití skipper-gridfs jsem se rozhodl použít místní úložiště souborů, ale myšlenka zůstává stejná. Opět to ještě není tak kompletní, jak by mělo být, ale je to snadný způsob, jak ověřit jednoduché věci, jako je typ a velikost souboru. Pokud má někdo lepší řešení, pošlete ho prosím :)!



  1. Jak najít číslo řádku řádku v seřazené kolekci MongoDB pro výpočet jeho percentilu?

  2. MongoDB Regex Query :Proč to nefunguje?

  3. MongoDB aktualizuje více vnořených dokumentů pomocí nebo dotazu

  4. Jak zvrátit uvolněnou agregaci?