17

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

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

文件类型Adob​​e .DNGCanon .CR2和文件大小~28MB

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

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

UPD:我按原样使用此上传器,只是进行了外观更改。

4

3 回答 3

5

好的。我得到了它。

使用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 类型或标题,而是按全文关键字。

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

结论:

  1. GoogleDrive 上传器检查Content-Type,即使转换选项设置为false
  2. GoogleDrive 有时会因这种转换而失败。
  3. Uploader 与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 内部服务器错误而崩溃:

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

于 2013-11-20T16:26:28.517 回答
2

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

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

于 2013-11-14T16:51:36.637 回答
0

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

于 2013-11-20T12:14:51.833 回答