sql >> データベース >  >> NoSQL >> MongoDB

Sails.jsは、スキッパーを使用してファイルをMongoDBにアップロードする前にチェックします(有効なファイル、画像のサイズ変更など)

    さて、しばらくこれをいじった後、私はうまくいくように見える方法を見つけることができました。

    おそらくもっと良いかもしれませんが、今のところ私が望んでいることを実行します:

    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. SQLのSELECTDISTINCTに相当するMongo?

    2. DBRefの配列によるドキュメントの検索

    3. mongodbのログ分析データベースに最適なスキーマ設計

    4. MongoDBでElasticsearchを使用するにはどうすればよいですか?