2017-10-02 8 views
0

nodeJs로 sftp 서버를 개발 중이며 파일을 업로드해야합니다. 내가 SFTP를 콘솔에 파일을 넣어파일의 정보를 읽을 수있는 스트림으로 가져올 수 있습니까?

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"); 
     }); 
    }); 
}); 
}); 

, 나는 파일을 읽을 수있는 이름 인 _path을 가지고 : 나는 거기에 이벤트 "의 WriteFile"을 가지고 node-sftp-server

: 나는이 모듈을 사용하고 있습니다 흐름. 두 단계로 그렇게해야합니다. 1 단계 : 나는

MongoDB를

에 정보를 정기적으로 등록해야하지만 ..에 등록 할 파일의 크기와 MIME 타입을 알고

이 필요합니다 내가 S3 SDK 클라이언트에서 파일을 업로드해야합니다 2 단계 (그것은 실제로 작동)

s3.upload 메서드는 BucketName, 파일 이름 및 버킷에있는 파일의 위치 만 반환합니다.

업로드 된 파일의 크기 및 mimeType을 어떻게 얻을 수 있습니까 ??

누군가가 나를 도울 수 있다면, 내가 :)

답변

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

+0

그래 내가 이미 하나를 시도하지만 콘텐츠 형식은 항상 "를 application/octet-stream "입니다. 파일 자체가 아닌 읽을 수있는 스트림의 유형입니다. – Cupkek05

+0

또는 이러한 메서드에서 메타 데이터를 가져올 수없는 경우, 이진 문자열로 읽을 수있는 스트림을 구문 분석 할 수 있습니까? ? 가능한 경우 putObject 메서드를 사용할 수 있습니다. – Cupkek05