MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Sails.js memeriksa barang-barang sebelum mengunggah file ke MongoDB dengan nakhoda (file yang valid, pengubahan ukuran gambar, dll)

Oke, setelah mengutak-atik ini sebentar, saya berhasil menemukan cara yang tampaknya berhasil.

Mungkin bisa lebih baik, tetapi melakukan apa yang saya inginkan untuk saat ini:

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

},

Alih-alih menggunakan skipper-gridfs, saya memilih untuk menggunakan penyimpanan file lokal, tetapi idenya tetap sama. Sekali lagi, ini belum selengkap yang seharusnya, tetapi ini adalah cara mudah untuk memvalidasi hal-hal sederhana seperti tipe file dan ukuran. Jika seseorang memiliki solusi yang lebih baik, silakan posting :)!



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Dapatkan kesalahan saat saya menginstal MongoDB di RedHat

  2. Membuat Json.NET + MongoDB Bson bermain bagus bersama

  3. Data pegas dan mongodb - putar kembali sederhana dengan pegas dalam @Transactional

  4. luwak memperbarui bidang di MongoDB tidak berfungsi

  5. $elemMatch setara dalam data pegas mongodb