Javascript 谷歌云存储多部分上传,最后一块失败(503)

Javascript 谷歌云存储多部分上传,最后一块失败(503),javascript,google-apps-script,google-cloud-storage,urlfetch,Javascript,Google Apps Script,Google Cloud Storage,Urlfetch,因此,我尝试使用多部分上传将一个文件上传到Google云存储,方法是事先将该文件分块,然后通过http put请求发送 问题是,当我上传文件的最后一块时,我得到的是一个503错误,而不是一条200完整的消息 为简单起见,我使用的是驱动器中的jpeg图像,先转换为blob,然后再转换为字节: var data = DriveApp.getFileById(DriveImageFileId).getBlob().getBytes(); 在文档之后,我首先请求一个可重复的上传URI var ac

因此,我尝试使用多部分上传将一个文件上传到Google云存储,方法是事先将该文件分块,然后通过http put请求发送

问题是,当我上传文件的最后一块时,我得到的是一个503错误,而不是一条200完整的消息

为简单起见,我使用的是驱动器中的jpeg图像,先转换为blob,然后再转换为字节:

var data = DriveApp.getFileById(DriveImageFileId).getBlob().getBytes();
在文档之后,我首先请求一个可重复的上传URI

  var accessToken = OAuth2.0_Access_Token;
  var header = {'X-Upload-Content-Type' : 'image/jpeg'}
  var body = {"name": "filename.jpeg"}  
  var options = {
    'method':'post',
    'contentType':'application/json',
    'oAuthUseToken':'never',  // Disables OAuth1.0 config 
    'muteHttpExceptions':true,
    'headers':header,
    'contentLength': 582381,
    'payload':JSON.stringify(body)
  };

  var response = UrlFetchApp.fetch('https://www.googleapis.com/upload/storage/v1beta2/b/myCloudStoreBucket/o?uploadType=resumable&access_token='+accessToken,options).getHeaders();
  var uploadUrl = response.Location 
这个很好用

我开始将文件字节解析为256x1024字节块,并使用上传URL通过http使用PUT进行上传。这不是问题,因为每次我上传一个块,我都会收到一个308响应,其中包含预期上传的字节数。我可以多次这样做,系数为256x1024,上传整个文件直到最后一块

下面是最后一个区块的URLFACHTAPP选项和标题,例如:

 var options = {
 "method": "put",
 "contentType": "image/jpeg",
 "contentLength": 58093,
 "oAuthUseToken": "never",
 "muteHttpExceptions": true,
 "headers": {
  "Content-Range": "bytes 524287-582380/582381"
 },
 "payload" : <dataBytes>
 }
 var response = UrlFetchApp.fetch(resumeUrl,options);

响应应该是200文件上传完成。我做错了什么?

回答自己的问题,因为问题正在解决:

所以这里有两个部分是错误的

  • 第一个是我最后发送的最后一个文件块是一个字节 短。我一直在使用我在头中发送给的字节范围 切片字节数组。丢失了最后一个字节,因为 这个

    通过调整脚本,使最后一个文件块 最后一个尾随字节,我能够得到一个200 HTTP响应 文件已成功上载

  • 第二个错误是API返回了空白503,这应该是 错误。根据云存储文档,您应该尝试503。API应该抛出4xx文件上传错误,这就是为什么我花了这么长时间才找到上传的问题所在


  • 我向谷歌云存储团队报告了503错误,他们将在接下来的两个版本中修复他们的API。

    我在这里看到了类似的问题,但我已经成功上传了区块。最后一块仍然是一个问题:
     Response Type: 503
     Response Header:
     {
     "Date": "Wed, 16 Apr 2014 06:08:43 GMT",
     "Content-Length": "0",
     "Alternate-Protocol": "443:quic",
     "Content-Type": "text/html; charset=UTF-8",
     "Server": "HTTP Upload Server Built on Apr 7 2014 11:59:06 (1396897146)"
     }
    No Response body or error message.