【问题标题】:Google Drive uploading file size limitGoogle Drive 上传文件大小限制
【发布时间】:2013-11-21 08:02:52
【问题描述】:

我正在尝试通过 REST API(可恢复上传)将我的文件上传到 Google Drive。 一切看起来都不错(XMLHttpRequest 触发 onprogressonload 事件),但之后(触发加载)Google Drive PUT 请求失败并出现500 Internal Server Error。文件未出现在我的 Google Drive 文件夹中。错误 500 出现在 xhr.onload,而不是 xhr.onerror

如果我尝试通过 Google Drive 界面上传该文件,也是如此。它有时会发生,而且我还没有 100% 复制的环境。

文件类型 Adobe .DNGCanon .CR2 和文件大小 ~28MB

我做错了什么?文件类型或文件是否存在已知错误或限制?

可能的原因:文件大小限制、文件类型限制,或者我的令牌在我的文件上传时已过期?

UPD:我按原样使用this uploader,只是进行了外观更改。

【问题讨论】:

  • 消除 3 种可能性中的 2 种应该相当容易。文件类型限制会触发任何文件大小,我希望状态为 405。除非您设置了 convert=true,否则 Drive 不会关心您的文件类型。如果您的令牌过期,您应该得到 401。所以我个人猜测这是一个错误/文件大小问题。此页面support.google.com/drive/answer/37603?hl=en 表示未转换文件的限制为 10GB。
  • 这是服务器响应参数:{"error":{"errors":[{"domain":"global","re​​ason":"internalError","message":"InternalError"} ],"code":500,"message":"InternalError"}}
  • 我认为这是一个云端硬盘错误,除非来自 Google 的人另有确认。您可能想尝试更可靠的旧版文档列表 API。
  • 我发现了这个问题stackoverflow.com/questions/14628024/…,它确认如果您的问题是访问令牌过期,您会看到 401,而不是 500。
  • 问题是否来自另一个 Google Drive 帐户?它适用于较小的文件吗?

标签: javascript api rest google-drive-api


【解决方案1】:

好的。我明白了。

使用 Content-Type == "application/octet-stream" 成功上传文件。看起来像 GoogleDrive 方面的错误,带有 mime 类型的文件。 在这种情况下,我的原始文件(DNG、CR2、NEF 等)以不正确的 mime 类型存储在 GoogleDrive 中(因此这些文件没有预览)。

所以我不能再按 mime 类型过滤文件了。

Query string = (mimeType = 'image/x-adobe-dng' or mimeType = 'image/x-canon-cr2' or mimeType = 'image/x-nikon-nef').

我尝试按关键字标题过滤文件,但看起来标题不包含扩展名,但响应项目标题包含扩展名。

Query string = (title contains '.dng' or title contains '.cr2' or title contains '.nef').

所以我必须过滤我的文件,而不是按 mime 类型或标题,而是按 fullText 关键字。

Query string = (fullText contains '.dng' or fullText contains '.cr2' or fullText contains '.nef').

结论:

  1. GoogleDrive 上传器会检查 Content-Type,即使转换选项设置为 false
  2. 转换时,GoogleDrive 有时会失败。
  3. 上传器可以很好地与 Content-Type == 'application/octet-stream' 配合使用。
  4. GoogleDrive 查询字符串关键字标题不包含文件扩展名,但响应标题有扩展名。
  5. GoogleDrive 查询字符串关键字fullText 包含带扩展名的文件名(mb 对于文本文件来说不是很快)。
  6. 要测试您的请求,您可以在页面末尾使用此工具https://developers.google.com/drive/v2/reference/files/list
  7. GoogleDrive API 不时崩溃并显示 HTTP 状态 500 Internal Server Error

{"error":{"errors":[{"domain":"global","reason":"backendError","message":"Backend Error"}],"code": 500,"message": "Backend Error"}}

【讨论】:

  • 该问题特定于可以缩略图的类型。非常大的文件可能会导致该服务超时,从而导致 500 错误。不确定何时会解决此问题,但在路线图上。
  • @SteveBazyl,如果您对缩略图数码照片原始格式有疑问,我可以为您或您的团队提供一些建议。
  • 问题不在于格式,而在于架构约束。计划进行修复。
  • 你找到解决这个问题的方法了吗?上传谷歌文档文件类型时我面临同样的问题。如果我没有设置 mime 类型,Google 文档文件将显示为 zip 文件而不是 google 文档。
【解决方案2】:

我认为这与原始照片文件有关,因为 DRIVE 会尝试 convert them to JPG,就像在 Google+ 中所做的那样,除非您指定 convert=false。您应该在上传 API 中指定不转换该文件。

这第二个帖子说它将允许您预览文件up to 25MB,这个大小限制可能与您的麻烦有关。也许您可以尝试上传另一张小于该尺寸的照片,以确保不是这个限制。

【讨论】:

  • 关于转换 - 不。我使用可恢复上传并将转换设置为 false。超过该状态 500 不时发生。关于文件大小 - 不。有时大文件正确上传,有时不正确。只有一件事是清楚的 - 它发生在大文件上。小文件总是能正确上传。
  • 在我看来,您可能只是互联网连接不稳定,这很难在日志和错误中确定。在工作场所、星巴克等场所尝试相同的设置,看看您的击球率是否有所提高。
【解决方案3】:

我也曾多次在谷歌分析中看到这个 500 错误,由于服务器繁忙,这很正常。如果我稍等片刻再试一次,它会起作用。尝试阅读此https://developers.google.com/drive/handle-errors#implementing_exponential_backoff 这对我使用 Google Analtyics API 有效,通常当它进入第 6 步时,它再次获得访问权限。还没有用谷歌驱动器尝试过,但是我之前没有尝试过上传 25m 的文件。但我打赌那是你的问题。

【讨论】:

  • 虽然这是正确的,但这只是故事的一小部分。各种 Google 后端会抛出许多不同的 500,其中一些在重试时会成功,而其中许多不会。所以做 expo-backoff 有时是正确的做法,但有时它会无限期地退避,直到你最终放弃并通知用户。
  • 在我的情况下,谷歌分析中拥有大量数据的用户一次查询数月是很正常的。添加过滤器和缝合的东西需要一段时间让服务器处理它。添加一些重试解决了这个问题。如果有大量数据,则将系统设置为逐月循环。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-06
  • 2011-01-29
  • 2017-03-09
  • 2011-01-13
  • 1970-01-01
  • 2022-10-26
  • 2018-02-18
相关资源
最近更新 更多