node.js - 使用signedURL将base64文件上传到GCS

标签 node.js google-cloud-storage postman pre-signed-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 上传的

不确定在通过 postman 上传文件时生成签名网址或任何 header 时是否丢失了某些内容。

谢谢:)

最佳答案

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

first line of the Object metadata Introduction还确认存储在 Cloud Storage 中的对象具有与其关联的元数据。因此,API header 将作为图像对象的元数据添加,从而增加对象的大小。

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

关于node.js - 使用signedURL将base64文件上传到GCS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56558659/

相关文章:

node.js - Express.js 中间件执行上面定义的路由

java - 如果我们传递 javax ssl 参数,Google Cloud Storage Client API 在证书验证中失败

node.js - 全局安装 brunch 时出现错误消息

javascript - mongodb/mongoose - 按两个字段排序

node.js - meteor 账号-密码错误

image - 如何使用 Golang 将图像上传到 firebase 存储

python - 副本主机 0 以非零状态 1 退出

javascript - Postman 中的预请求脚本范围

aws-lambda - 在 Lambda(Node.js) 中解析 multipart/form-data 中的数据

Kubernetes pod exec API-需要升级请求