Google Drive Api Upolading File Error with error code 500 Inernal server error and 410 Gone

时间:2017-06-12 06:07:18

标签: google-api google-drive-api

我正在使用可恢复/简单上传将文件上传到Google云端硬盘,具体取决于文件大小。我在使用 500内部服务器错误上传Google文档文件时遇到问题。由于Google文档建议使用指数备份来解决此错误。我试图在一段时间间隔(一分钟后)>上传相同的数据但是它会出现错误 410 Gone

我对此问题的调查结果是......

  1. 在驱动器设置mime类型的文件上创建文件为 application / octet-stream 或保持其值 null
  2. 使用可恢复/简单上传
  3. 上传数据
  4. 接收成功结果,但该文件已显示为zip文件而非Google文档文件。
  5. 如果我在创建Google提供的文件时设置mime type,则会创建文档文件。
  6. 但是在上传数据时会抛出错误(500和410)
  7. 这个问题的可能解决方案是什么?

1 个答案:

答案 0 :(得分:1)

  

500内部服务器错误

基本上意味着处理您的请求的服务器很忙。您不是唯一访问该服务器的开发人员,因此如果其他人在您发送请求的同时发出了非常重要的处理器请求,那么您的请求可能会超时。正如你提到的谷歌说,在5xx错误的情况下我们应该implement exponential backoff

  

410响应主要用于通过通知收件人资源有意不可用以及服务器所有者希望删除到该资源的远程链接来协助Web维护任务。这种事件对于限时,促销服务以及属于不再与原始服务器网站相关联的个人的资源是常见的。没有必要将所有永久不可用的资源标记为"已消失"或者将标记保留一段时间 - 由服务器所有者自行决定。

这意味着您在重新发送请求之前等了很久。

实施指数退避。

指数退避是客户端在不断增加的时间内定期重试失败请求的过程。它是网络应用程序的标准错误处理策略。 Core Reporting API的设计期望选择重试失败请求的客户端使用指数退避来执行此操作。除了" required"之外,使用指数退避可以提高带宽使用效率,减少获得成功响应所需的请求数量,并最大化并发环境中请求的吞吐量。

实现简单指数退避的流程如下:

  1. 向API提出请求
  2. 收到具有可重试错误代码的错误响应
  3. 等待1s + random_number_milliseconds秒
  4. 重试请求
  5. 收到具有可重试错误代码的错误响应
  6. 等待2s + random_number_milliseconds秒
  7. 重试请求
  8. 收到具有可重试错误代码的错误响应
  9. 等待4s + random_number_milliseconds秒
  10. 重试请求
  11. 收到具有可重试错误代码的错误响应
  12. 等待8s + random_number_milliseconds秒
  13. 重试请求
  14. 收到具有可重试错误代码的错误响应
  15. 等待16s + random_number_milliseconds秒
  16. 重试请求
  17. 如果仍然出现错误,请停止并记录错误。
  18. 在上面的流程中, random_number_milliseconds 是小于或等于1000的1.毫秒的随机数。这对于避免某些并发实现中的某些锁定错误是必要的。每次等待后必须重新定义random_number_milliseconds。

    回答:无法避免您不时会收到500错误。我认为您的问题是,您说您在等待一分钟后发送您的请求,这就是您收到410错误的原因。

    注意:我已记录bug report,要求提供更好的实施Google云端硬盘实施指数退避的示例