使用multer将文件上传到S3存储桶时进行CRC32检查

时间:2020-07-29 08:05:46

标签: node.js express amazon-s3 multer-s3

在保存到s3磁盘之前,必须对上载的文件进行crc32校验和。 我正在使用multer和multer-s3将文件上传到s3,这很容易实现。 在中间尝试在文件上传期间进行crc32检查。部分完成的代码下面的代码可以完美地执行crc32的工作,但是上传的文件没有全部块。

var AWS = require("aws-sdk");
const multer = require("multer");
const multerS3 = require("multer-s3");
const { crc32 } = require('crc');

AWS.config.update({
  secretAccessKey: AWS_XXXXXX_SecretAccessKey,
  accessKeyId: AWS_XXXXXX_AccessKeyID,
  //region: 'us-east-1'
});

const s3 = new AWS.S3();

var upload = multer({
  limits: { fileSize: 100000 },
  storage: multerS3({
    s3: s3,
    bucket: constants.AWS_Cred.bucketName,
    /* metadata: function (req, file, cb) {
        cb(null, {fieldName: file.fieldname});
        //tried moving stream logic here still no success
      }, */
    key: function (req, file, cb) {
      console.log("KEY");
      var buffer = new Buffer.alloc(0);
      // const b = file.stream.pipe( new PassThrough());  -- tried to clone a stream here still failed
      file.stream.on("data", function(data) {
        buffer = Buffer.concat([buffer, data]);
      }); 
      file.stream.on('end', function() {
        let fileCRCCheckSum = crc32(buffer).toString(16);
        console.log(fileCRCCheckSum);
      });
      cb(null, constants.Firmware_Saved_Location + file.originalname); 
    },
  }),
});



Router
router.post(
  "/uploadSong",
  upload.single("files"),
  uploadController.DoesSomeDBEntriesHere
);

将照顾Controller,该Controller仅将其他条目保存到Db。 很高兴听到任何建议。

0 个答案:

没有答案