2017-03-03 73 views
0

我試圖使用AWS S3 SDK上傳圖片。現在這個工作之前,但由於某種原因,它只是停止工作,我開始收到此錯誤:AWS S3:我們計算的請求籤名與您提供的簽名不匹配

enter image description here

現在,當我點擊鏈接它給了我一個「NoSuchKey」錯誤:

enter image description here

我真的不明白這一點,因爲我的關鍵字實際上只是一個字符串。我也試圖上傳的東西很明顯,關鍵不存在 - 我試圖上傳它!

function initiateBucket() { 
     var albumBucketName = 'bucket_name'; 
     var bucketRegion = 'us-east-1'; 
     var IdentityPoolId = 'identity_pool_id'; 

     AWS.config.update({ 
      region: bucketRegion, 
      credentials: new AWS.CognitoIdentityCredentials({ 
       IdentityPoolId: IdentityPoolId 
      }) 
     }); 

     return new AWS.S3({ 
      apiVersion: '2006-03-01', 
      params: {Bucket: albumBucketName} 
     }); 

function upload(file, key, metaData) { 
    var temp = 'test'; 
    var temp1 = "test"; 
    if(verifyMetaData(metaData)) { 
     var s3 = vm.initiateBucket(); 
     console.log(s3); 
     s3.upload({ 
      Key: temp, 
      Body: temp1, 
      ACL: 'public-read', 
      Metadata: metaData 
     }, function(err, data) { 
      if (err) { 
       console.log(err.message); 
       return false; 
      } 
      else { 
       console.log("Successfully Uploaded to S3"); 
       return true; 
      } 
     }); 
    } 
    else { 
     console.log("Invalid MetaData"); 
     console.log(metaData); 
     return false; 
    } 
}; 

奇怪的是,我遵循兩個教程,放在我的憑據,它爲兩個工作。然後,我直接複製粘貼他們如何配置AWS config對象到我的initiateBucket函數,我最終得到相同的錯誤。

這是我跟着教程之一(請看「配置SDK」):

http://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/s3-example-photo-album.html

其他教程是從一個博客,我沒有鏈接到它,但我上面的代碼與本教程中的文檔相同。我所做的只是把它移到一個函數中(這個函數被調用了),而在教程中他們把它作爲一個全局變量。

由於它在教程中起作用,所以它不能成爲配置問題。我認爲它必須與403錯誤和「NoSuchKey」錯誤有關。但是,再次,代碼是相同的教程,我只是傳遞字符串,所以也沒有任何意義。

我還注意到的另一件事是從403錯誤的鏈接有點奇怪。它以「https://mng-monet.s3.amazonaws.com/test

開頭是不是應該是s3.amazonaws //鍵是這樣嗎?: 「https://s3.amazonaws.com/mng-moment/test/ ...」。我的文件夾中的文件的URL以s3.amazonaws開頭,而不是像403錯誤那樣的我的bucketName。

我不知道爲什麼這些是不同的,或者他們甚至應該是不同的。我也不知道如何更改URL,因爲我不認爲我實際上告訴它要傳送哪個URL。

任何想法表示讚賞。

感謝。

+0

解釋混淆(但不是原因):「鑰匙」在這裏意味着兩件不同的事情。 *檢查您的密鑰*是指訪問密鑰和祕密訪問密鑰,意思是「確認您使用的是正確的憑證。」 *指定的鍵不存在*表示「該對象具有此對象鍵(路徑/文件名)在該存儲桶中不存在」。點擊鏈接會嘗試「GET」對象,所以錯誤確實有意義 - 它不在那裏。該網址有效。 'bucket.s3 ... /'對於所有地區都是有效的,包括us-east-1,而's3 .../bucket /'只在us-east-1有效,而在其他地區則不成功。 –

+0

所以如果我正確解釋你的評論意味着我的鑰匙可能是好的。由於它無法顯着上傳到該對象DNE的URL。這是否意味着它與initiatorBucket()中的內容有關? – MatTaNg

回答

2

事實證明,這是元數據,一切都搞砸了。花了我兩天的時間才發現元數據之後的額外空間會拋出這個錯誤。真的不是一個有用的錯誤消息。

相關問題