gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:29:23 24 4
gpt4 key购买 nike

我正在尝试使用签名网址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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com