MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Sails.js проверява неща, преди да качи файлове в MongoDB с skipper (валидни файлове, преоразмеряване на изображения и т.н.)

Добре, след като се занимавах с това известно време, успях да намеря начин, който изглежда работи.

Вероятно може да е по-добре, но засега прави това, което искам:

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

},

Вместо да използвам skipper-gridfs, избрах да използвам локално съхранение на файлове, но идеята остава същата. Отново, все още не е толкова пълно, колкото би трябвало да бъде, но е лесен начин за валидиране на прости неща като файлов тип и размер. Ако някой има по-добро решение, моля да го публикува :)!



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. htmlspecialchars премахнете стойността вътре в масива?

  2. Как да внедрим ASP.NET Core 3.1 идентичност с MongoDB?

  3. Променете типа на полето в агрегирането на mongoDB и използва ли $lookup индекс върху полета или не?

  4. Проектиране към друг тип с помощта на C# SDK

  5. Как мога да се свържа с MongoDB Atlas чрез Robomongo?