andrewrk / node-s3-client

high level amazon s3 client for node.js
MIT License
1k stars 303 forks source link

uploadDir: Non-file stream objects are not supported with SigV4 in AWS.S3 #196

Open Troy-Yang opened 6 years ago

Troy-Yang commented 6 years ago

Hi guys,

Have you encountered an exception below when using uploadDir API method?

s3-test.js:36
progress 2857456 4219649
s3-test.js:36
progress 2817113 4219649
s3-test.js:36
unable to sync: Error: Non-file stream objects are not supported with SigV4 in AWS.S3
s3-test.js:33
    at Request.computeSha256 (e:\test\node\node_modules\aws-sdk\lib\services\s3.js:200:18)
    at Request.callListeners (e:\test\node\node_modules\aws-sdk\lib\sequential_executor.js:97:18)
    at Request.emit (e:\test\node\node_modules\aws-sdk\lib\sequential_executor.js:77:10)
    at Request.emit (e:\test\node\node_modules\aws-sdk\lib\request.js:604:14)
    at Request.transition (e:\test\node\node_modules\aws-sdk\lib\request.js:21:12)
    at AcceptorStateMachine.runTo (e:\test\node\node_modules\aws-sdk\lib\state_machine.js:14:12)
    at e:\test\node\node_modules\aws-sdk\lib\state_machine.js:26:10
    at Request.<anonymous> (e:\test\node\node_modules\aws-sdk\lib\request.js:22:9)
    at Request.<anonymous> (e:\test\node\node_modules\aws-sdk\lib\request.js:606:12)
    at Request.callListeners (e:\test\node\node_modules\aws-sdk\lib\sequential_executor.js:104:18)

My s3 version is latest "s3": "^4.4.0", aws sdk:"aws-sdk": "~2.0.31"

I then tried to change default Sigv4 to Sigv3 and v2. Sigv3 shoule me acess deined issue, Sigv2 shows me an 'unable to sync: TypeError: Cannot set property 'Timestamp' of undefined'.

Here is my s3 options:

...
 s3Options: {
   accessKeyId: "xxx",
   secretAccessKey: "xxx",
   region: "ap-northeast-1",
   // signatureVersion: 'v3'
 }

One thing needs to mention is 'downloadFile' and ‘uploadFile’ API method work good.

Thanks, Troy

sators commented 6 years ago

See the fix found here: https://github.com/andrewrk/node-s3-client/issues/175#issuecomment-324619786