我正在开发一个带有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?
如果有人能帮助我,我将不胜感激:)
答案 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