繁体   English   中英

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

[英]Create SignedURL of google cloud storage object using Node.js

我需要使用Node.js创建存储在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>

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

您的signedURL包含expires=NaN
到期时间应为整数。 尝试

Date.now() + URL_VALID_DURATION

代替
Date.now()* URL_VALID_DURATION

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM