2017-07-12 132 views
-1

在一個Web應用程序中,有一個谷歌存儲桶,其中頁面和佈局與靜態內容一起存儲。 有一個帶有nodejs應用程序的Google計算服務器,它使用佈局和dust.js來生成標記。 問題: Google雲存儲將舊的/棄用的文件內容返回給Google計算實例,但不會返回到GCE本地以外的相同代碼。本地啓動的代碼獲取新鮮的內容。 即使進程或機器重新啓動也無助於解決此問題。 此項目使用標準包@ google-cloud/storage來訪問存儲桶內容。谷歌雲存儲向谷歌計算實例提供舊內容

+1

是你的對象配置爲允許緩存?請參閱https://cloud.google.com/storage/docs/gsutil/addlhelp/WorkingWithObjectMetadata#cache-control –

+0

請在主題標題和文本中更清楚地闡述您的開發相關問題(使用明確的問題並提供代碼/文件例子)。 – Fabien

回答

0

我能自己解決這個問題,這樣的代碼:

const STORAGE_DOWNLOAD_BASE_URL = "https://storage.googleapis.com"; 

const bucketName = 'yoursuperbucket 

/** 
* 
* @param {string} bucketName 
* @param {string} fileName 
* @return {string} 
*/ 
function getUniqueDownloadUrl(bucketName, fileName) { 
    return [STORAGE_DOWNLOAD_BASE_URL, bucketName, fileName].join('/') + '?no-cache=true&ignore-cache=true&anti-cache=' + (new Date().getTime()); 
} 
      return new Promise(function (resolve, reject) { 
       request({ 
        url: getUniqueDownloadUrl(bucketName, filePath), 
        method: 'GET', 
        headers: { 
         'Cache-Control': 'no-cache' 
        } 
       }, function (err, response) { 
        if (err) { 
         console.error('Failed load file content: ' + filePath + ' from bucket ' + bucketName + ' - ' + err); 
         return reject(err); 
        } 
        resolve(response.body); 
       }); 
      }); 

對於這依賴於綁定到您的GCE實例服務帳戶不是公共訪問規則桶