GCS JSON API分段上传返回"代码":400,"消息":"不支持的内容类型:image / png"

时间:2014-03-23 17:20:29

标签: google-apps-script google-cloud-storage

我尝试使用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中的方式实现了多部分内容,但我得到了同样的错误。

有什么想法吗? 感谢

1 个答案:

答案 0 :(得分:2)

分段上传不适用于在一个交易中上传多个对象。相反,它是一种上传对象并同时为其指定元数据属性的方法。

分段上传必须包含两个部分。首先,指定元数据的application / json部分,其次是正在上载的对象的数据,无论它是什么类型。

如果您想一次上传8个对象,我建议使用8个单独的连接。