我試圖使用AWS S3 SDK上傳圖片。現在這個工作之前,但由於某種原因,它只是停止工作,我開始收到此錯誤:AWS S3:我們計算的請求籤名與您提供的簽名不匹配
現在,當我點擊鏈接它給了我一個「NoSuchKey」錯誤:
我真的不明白這一點,因爲我的關鍵字實際上只是一個字符串。我也試圖上傳的東西很明顯,關鍵不存在 - 我試圖上傳它!
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。
任何想法表示讚賞。
感謝。
解釋混淆(但不是原因):「鑰匙」在這裏意味着兩件不同的事情。 *檢查您的密鑰*是指訪問密鑰和祕密訪問密鑰,意思是「確認您使用的是正確的憑證。」 *指定的鍵不存在*表示「該對象具有此對象鍵(路徑/文件名)在該存儲桶中不存在」。點擊鏈接會嘗試「GET」對象,所以錯誤確實有意義 - 它不在那裏。該網址有效。 'bucket.s3 ... /'對於所有地區都是有效的,包括us-east-1,而's3 .../bucket /'只在us-east-1有效,而在其他地區則不成功。 –
所以如果我正確解釋你的評論意味着我的鑰匙可能是好的。由於它無法顯着上傳到該對象DNE的URL。這是否意味着它與initiatorBucket()中的內容有關? – MatTaNg