是否有可能在可读流中获取文件的信息?

时间:2017-10-02 12:44:36

标签: javascript node.js mongodb amazon-s3 sftp

我正在开发一个带有nodeJs的sftp服务器,我需要上传一个文件。 我正在使用这个模块:node-sftp-server

我在那里得到了“writefile”事件:

session.on("writefile", function (_path, readstream) {

        console.warn("Receipt file " + Path.basename(_path));
        var uploadParams = { Bucket: Vertigo.getenv('APP_S3_BUCKETNAME'), Key: Path.basename(_path), Body: readstream }
        s3.upload(uploadParams, function (err, data) {
            if (err) {
                console.warn(err, err.stack)
                return err;
            } else {
                console.log("File: " + data.Key + " successfully uploaded");
                /**
                 * AJOUTER FICHIER DANS MONGODB
                 */
                receiptFile.insert({
                    date: new Date(Date.now()),
                    userId: ObjectID(request.params.userId),
                    file: {
                        s3BucketName: data.Bucket,
                        s3ObjectName: data.Key,
                        name: data.Key,
                        //size: data.Contents.Size, //Comment récuperer la taille ?
                        // mimetype: file.mimetypes //Comment récuperer le mimeType?
                    }
                }, function (err, result) {
                    if (err) {
                        var deleteParams = { Bucket: Vertigo.getenv('APP_S3_BUCKETNAME'), Key: Path.basename(_path) }
                        //Si une erreur s'est produite, on supprime les fichiers insérés précèdemment pour que la bdd et minio soient toujours synchronisés
                        s3.deleteObject(deleteParams, function (err, data) {
                            if (err) {
                                console.warn(err, err.stack)
                            }
                            console.log(deleteParams.Key + " : Deleted from : " + deleteParams.Bucket)
                        })
                        return err;
                    }
                    else {
                        console.log("Mongodb : File inserted in our database");
                    }
                })
            }
        });
        readstream.on("end", function () {
            console.warn("File has been wrote");
        });
    });
});
});

当我将文件放在sftp控制台上时,我得到了_path,它是文件名和可读流。我需要分两步完成。 第1步:我必须在s3 SDK客户端上传文件(它实际上有效) 第2步:我必须在mongoDB中注册信息

但我需要知道文件的大小和mimeType才能注册它。

s3.upload方法只返回BucketName,文件名和Bucket中文件的位置。

我怎样才能获得上传文件的大小和mimeType?

如果有人能帮助我,我将不胜感激:)

1 个答案:

答案 0 :(得分:0)

试试这个:

s3.headObject({ Key: key, Bucket: bucket })
  .promise()
  .then(res => {
    const size = res.ContentLength;
    const type = res.ContentType;
  });

看:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#headObject-property