2017-10-10 43 views
0

我面臨一個獨特的問題,我無法理解背後的原因。來自Amazon S3 Bucket的圖像沒有顯示在第一個請求

我有Amazon S3帳戶,並且我創建了存放我上傳圖片的存儲桶。我正在使用以下代碼來檢索圖像。我的問題是獨一無二的,因爲當我在第一個請求中檢索圖像時,它不會在網頁上顯示任何內容,但在隨後的請求顯示到網頁後圖像會被檢索到。

我無法理解原因。

角JS代碼

$scope.retrieveImage = function() 
{ 
    AWS.config.update({ 
     accessKeyId: "MY_ACCESS_KEY", 
     secretAccessKey: "MY_SECRET_KEY" 
    }); 

    AWS.config.region = "BUCKET_REGION"; 

    var bucketInstance = new AWS.S3(); 
    var params = { 
     Bucket: "BUCKET_NAME", 
     Key: "FILE_NAME" 
    } 
    bucketInstance.getObject(params, function (err, file) { 
     if (file) { 
      $scope.imgSrc = "data:" + file.ContentType + ";base64," + encode(file.Body);   
     } else { 
      console.log('error::', err); 
     } 
    }); 
} 

function encode(data) { 
    var str = data.reduce(function (a, b) { return a + String.fromCharCode(b) }, ''); 
    return btoa(str).replace(/.{76}(?=.)/g, '$&\n'); 
} 
+1

這個問題可能與AngularJs有關,您測試的圖像是在AngularJs之外檢索的,或者您可以使用Chrome Developer工具監視網絡流量,您很可能會發現圖像是從Amazon S3返回的每個請求和你的AngularJs視圖只是不正確刷新 –

+0

你是對的。問題在於Angular JS。應用$ scope。$ apply()後,它會在第一次加載時開始顯示圖像。 – user1843970

+0

很高興你想通了,我添加了我的評論作爲答案,因爲它是答案:) –

回答

2

這個問題可能與AngularJs有關,確認圖像是在AngularJs之外檢索的,或者您可以使用Chrome Developer工具監控網絡流量,您可能會發現圖像是從每個請求的Amazon S3返回的,並且您的AngularJs視圖只是不能正確刷新

1

你應該閱讀更多關於S3 Data Consystency Model

亞馬遜S3提供讀後寫在所有區域中的S3存儲桶的新 對象PUTS一致性有一個警告。 需要注意的是,如果您在創建對象之前對密鑰名稱(如果存在對象存在 )進行HEAD或GET請求,則Amazon S3提供了 最終一致性,用於寫後讀寫。

Amazon S3在覆蓋所有地區的PUTS和DELETES 方面提供最終一致性。

這意味着有一些延遲/延遲後,你把成功的代碼。

相關問題