谷歌云存储将旧内容提供给谷歌计算实例

时间:2017-07-12 23:02:22

标签: node.js google-cloud-storage google-compute-engine

在网络应用程序中,有一个谷歌存储桶,其中页面和布局存储在静态内容中。 有一个带有nodejs应用程序的谷歌计算服务器,它使用布局和dust.js来生成标记以生成标记。 问题: Google云端存储将旧的/已弃用的文件内容返回给谷歌计算实例,但不归结为在GCE之外本地启动的相同代码。本地启动的代码获取新鲜内容。 即使是过程或机器重启也无助于解决这个问题。 此项目使用标准包@ google-cloud / storage来访问存储桶内容。

1 个答案:

答案 0 :(得分: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实例的服务帐户