MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Sails.js sprawdza zawartość przed przesłaniem plików do MongoDB za pomocą skipera (prawidłowe pliki, zmiana rozmiaru obrazu itp.)

Ok, po manipulowaniu tym przez jakiś czas udało mi się znaleźć sposób, który wydaje się działać.

Prawdopodobnie mogłoby być lepiej, ale robi to, czego na razie chcę:

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

},

Zamiast używać skipper-gridfs wybrałem lokalną pamięć masową, ale idea pozostaje ta sama. Ponownie, nie jest jeszcze tak kompletny, jak powinien, ale jest to łatwy sposób na sprawdzenie prostych rzeczy, takich jak typ i rozmiar pliku. Jeśli ktoś ma lepsze rozwiązanie, opublikuj je :)!



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Limit czasu MongoDB tylko w określonym projekcie

  2. MongoDB $push

  3. Relacja Loopback ma wiele nie działa na mongodb

  4. jak zapisać dataframe w mongodb za pomocą pyspark?

  5. Nie można połączyć Hive z MongoDB za pomocą złącza mongo-hadoop