我正在尝试使用签名的URL将base64文件/图像上传到Google cloud storage中。我的服务器端代码(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的,文件大小也不同,你可以在存储中看到。
第一张图片通过拖放直接上传到GCS中。
第二张图片与邮递员一起上传
通过postman上传文件时,我不确定是否在生成签名url或任何头文件时遗漏了什么。
谢谢:)
发布于 2019-06-13 03:45:01
上传到Google Cloud Storage的对象大小不同的原因实际上是对象的元数据不同。当您使用REST API通过POSTMAN上传图像对象时,API头部将作为图像元数据的一部分添加。这个Google Documentation明确声明“云存储将这些头作为对象元数据的一部分进行存储”。
first line of the Object metadata Introduction还确认存储在云存储中的对象具有与其关联的元数据。因此,API标头被添加为Image对象的元数据,从而增加了对象的大小。
控制台上传的图片对象除了they are explicitly set外,没有Object元数据。
https://stackoverflow.com/questions/56558659
复制相似问题