我尝试使用Google Apps脚本将多个帖子上传图片到Google云端存储。我设置了一个具有公共写权限的存储桶。一次上传一个文件时一切正常,如下:
function simpleUploadToGCS() {
var blob1 = UrlFetchApp.fetch("https://www.bkper.com/images/logo_beta_low.png").getBlob();
var payload = new Object();
payload.blob = blob1;
var bucketNameOnGCS="your-bucket";
var url = 'https://www.googleapis.com/upload/storage/v1beta2/b/'+bucketNameOnGCS+'/o?name=image.png&key={yourKey}'
var fetchArgs= new Object();
var header={
'x-goog-project-id': '{your-project-id}'
}
fetchArgs.headers = header;
fetchArgs.payload = payload;
fetchArgs.method = 'POST';
var result = UrlFetchApp.fetch(url,fetchArgs);
Logger.log(result.getContentText());
return result;
}
但我需要一次上传8个文件,因此,在尝试分段上传时,请执行以下操作:
function multipartUploadToGCS() {
var blob1 = UrlFetchApp.fetch("https://www.bkper.com/images/logo_beta_low.png").getBlob();
var blob2 = UrlFetchApp.fetch("https://www.bkper.com/images/logo_beta_high.png").getBlob();
var payload = new Object();
payload.blob1 = blob1;
payload.blob2 = blob2;
var bucketNameOnGCS="bkper-gapps-addons";
var url = 'https://www.googleapis.com/upload/storage/v1beta2/b/'+bucketNameOnGCS+'/o?uploadType=multipart&key={your-project-key}'
var fetchArgs= new Object();
var header={
'x-goog-project-id': 'your-project-id'
}
fetchArgs.headers = header;
fetchArgs.payload = payload;
fetchArgs.method = 'POST';
fetchArgs.muteHttpExceptions = true;
var result = UrlFetchApp.fetch(url,fetchArgs);
Logger.log(result.getContentText());
return result;
}
我收到了错误:
"error": {
"errors": [
{
"domain": "global",
"reason": "badContent",
"message": "Unsupported content with type: image/png"
}
],
"code": 400,
"message": "Unsupported content with type: image/png"
}
}
这是一个简单的代码,仅用于示例目的,多部分后期数据由FetchUrl服务创建,但它看起来正确。我已经完全按照documentation中的方式实现了多部分内容,但我得到了同样的错误。
有什么想法吗? 感谢
答案 0 :(得分:2)
分段上传不适用于在一个交易中上传多个对象。相反,它是一种上传对象并同时为其指定元数据属性的方法。
分段上传必须包含两个部分。首先,指定元数据的application / json部分,其次是正在上载的对象的数据,无论它是什么类型。
如果您想一次上传8个对象,我建议使用8个单独的连接。