2015-02-23 29 views
0

我正嘗試將一個Webshot上傳到S3。當我放在一起AWS S3對象,我被告知它有沒有「上傳」方法:Node.js AWS-SDK:對象沒有方法'上傳'

var s3obj = new aws.S3({params: {Bucket: 'whatever', Key: 'idksomefile' }}); 
s3obj.upload({Body: body}). 
       on('httpUploadProgress', function(evt) { console.log(evt); }). 
       send(function(err, data) { console.log(err, data) }); 

,我發現了以下錯誤:

TypeError: Object [object Object] has no method 'upload' 

知道爲什麼這是爆炸?

回答

0

編輯1: 請檢查您的aws-sdk版本並確保其2.1.13版本更新。

嘗試在上傳功能中指定密鑰。看到example

var s3obj = new aws.S3({params: {Bucket: 'whatever'}}); 
s3obj.upload({Key: 'idksomefile', Body: body}). 
       on('httpUploadProgress', function(evt) { console.log(evt); }). 
       send(function(err, data) { console.log(err, data) }); 
+0

沒有骰子。仍然得到相同的錯誤。我真的很難過 - 這似乎是我獨有的問題:P – opticon 2015-02-23 21:55:17

+0

是否需要AWS Node.JS SDK作爲變量aws? – 2015-02-23 21:56:45

+0

是的。一切似乎都是猶太教。 – opticon 2015-02-23 22:03:37

1

當您從aws.S3創建s3obj你應該只傳遞一個Bucket參數,然後設置Keyupload方法參數。

從AWS文檔:found here

var s3obj = new aws.S3({params: {Bucket: 'whatever'}}); 
s3obj.upload({Key: 'idksomefile', Body: body}). 
       on('httpUploadProgress', function(evt) { console.log(evt); }). 
       send(function(err, data) { console.log(err, data) }); 

更新1:

body變量可以是一個Stream對象,在這種情況下,你將需要使用.toString()

var s3obj = new aws.S3({params: {Bucket: 'whatever'}}); 
s3obj.upload({Key: 'idksomefile', Body: body.toString()}). 
       on('httpUploadProgress', function(evt) { console.log(evt); }). 
       send(function(err, data) { console.log(err, data) }); 
+0

這個也沒有骰子。就好像s3對象根本沒有上傳方法。 – opticon 2015-02-23 21:55:40

+0

愚蠢的問題,但你確定你是認證?如果你使用'console.log(s3obj)',你會得到什麼? – theVinchi 2015-02-23 22:20:13

+0

如果我進行身份驗證,應該看到什麼?大量的代碼發佈。應該都很好。根據建議更新到2.1.13讓我通過了缺少的方法錯誤 - 現在得到一個不同的錯誤:stream沒有方法'read' – opticon 2015-02-23 22:22:57