使用signedURL

时间:2019-06-12 09:17:22

标签: node.js google-cloud-storage postman pre-signed-url

我正在尝试使用签名的URL base64 文件/图像上传到 Google云存储。我的服务器端代码(NodeJS)是这样的:

let {Storage} = require('@google-cloud/storage');

storage = new Storage({
  projectId,
  keyFilename: gcloudServiceAccountFilePath,
});

function generateSignedUrl(){
const options = {
      version: 'v4',
      action: 'write',
      expires: Date.now() + 15 * 60 * 1000, // 15 minutes
      //contentType: 'application/octet-stream'
    };
}

const [url] = await storage.bucket(gcloudBucket)
      .file(`${fileRelativePath}`).getSignedUrl(options);

return url;
}

现在,当我尝试使用以下配置的POSTMAN时,

Request: PUT
URL: https://storage.googleapis.com/my-signed-url.. //generated from above code
Headers:
  x-goog-acl: 'public-read'
  Content-Type: 'image/jpeg'
Body:
  raw : 'base64-file-conent'

我在GCS中上传的文件保持为base64,并且文件大小也有所不同,正如您在存储中看到的那样。

enter image description here

通过拖放将第一张图片直接上传到GCS中。

第二张图片通过POSTMAN上传

不确定通过邮递员上传文件时生成签名URL或任何标头时是否缺少某些内容。

谢谢:)

1 个答案:

答案 0 :(得分:0)

上传到Google Cloud Storage的对象大小不同的原因实际上是对象元数据的不同。当您使用REST API使用POSTMAN上传图像对象时,API标头将作为图像元数据的一部分添加。 Google Documentation明确指出“云存储将这些标头存储为对象元数据的一部分”。

first line of the Object metadata Introduction还确认存储在Cloud Storage中的对象具有与之关联的元数据。因此,API标头作为您的Image对象的元数据添加,因此增加了对象的大小。

通过控制台上载的图像对象没有对象元数据,除了they are explicitly set