使用Node.js创buildGoogle云存储对象的SignedURL

我需要使用Node.js创build存储在Google云端存储中的对象(使用Google Developer Console上传)的签名url。

这是我的代码:

var gcloud = require('gcloud'); // Google Cloud Storage Bucket Name const BUCKET_NAME = 'testBucketName123'; // Google Developer Console project ID const PROJECT_ID = 'testProjectName123'; /* Google Developer Console -> API Manager -> Credentials -> Add credentials -> Service account -> JSON -> Create */ const KEY_FILENAME = 'testKey.json' // relative path const SECONDS = 1000; // seconds in milliseconds const URL_VALID_DURATION = 30 * SECONDS; var gcs = gcloud.storage({ projectId: PROJECT_ID, keyFilename: KEY_FILENAME }); var filename ='tasksel.png'; var file = gcs.bucket(BUCKET_NAME).file(filename); file.getSignedUrl({ // More documention on options at // https://googlecloudplatform.github.io/gcloud-node/#/docs/v0.24.1/storage/file?method=getSignedUrl action: 'write', expires: Date.now() * URL_VALID_DURATION }, function (err, url) { if (err) { console.error(err); return; } console.log("URL"); console.log("-----"); console.log(url); console.log("-----"); console.log("PUT to this URL to upload to Google Cloud Storage as " + filename); }); 

我得到这样的URL输出:

 https://storage.googleapis.com/testBucketName123/tasksel.png?GoogleAccessId=keyId@iprojectName.iam.gserviceaccount.com&Expires=NaN&Signature=MmI5cQ3NINpOOP%2Fer02R0LxRZJAHplmstvofDXU139VNmZ0MsxpAOTGg6JUHBr8EztiTdR7cNNltoSb0zpM2DCRK5UpDjlrJ6WriSL2uyDsGWgfdx4M1vS0ussRm9BHAT31tqo0U5cdzgJd5rjakPMV06NUw0YYQn1oAEzE6JwThFfUZa%2FexddP763yDOQDKh5sJxW9go3JNmam%2Bk8qq0wJnVP5GNhl3JGlKW7l5AtimUwaI%2BViasX6LNmvwtoyM4%2Fg6Ebx%2BnI9%2Bk2LxWA3c8MUypeEZj0W8AWv%2BAWjf1bzeCEMTOjxV53bo1SA0zmUGjE6GDVd9PnYomwJ88v2h3Q%3D%3D 

但是当我用浏览器打开这个URL的时候我得到了输出:

 <Error> <Code>SignatureDoesNotMatch</Code> <Message> The request signature we calculated does not match the signature you provided. Check your Google secret key and signing method. </Message> <StringToSign>GET NaN /testBucketName123/tasksel.png</StringToSign> </Error> 

什么是实际问题? 有任何想法吗?