我试图通过REST API(可恢复上传)将我的文件上传到Google云端硬盘。
一切看起来都不错(XMLHttpRequest
触发onprogress
和onload
个事件),但在此之后(onload触发)Google Drive PUT请求失败并显示500 Internal Server Error
。文件未显示在我的Google云端硬盘文件夹中。错误500来自xhr.onload
,而不是xhr.onerror
。
如果我尝试通过Google云端硬盘界面上传该文件,也一样。它有时会发生,我没有100%复制的环境。
文件类型 Adobe .DNG 或佳能.CR2 和文件大小 ~28MB 。
我做错了什么?是知道文件类型或文件的bug还是限制?
可能的原因:文件大小限制,文件类型限制,或者我的文件上传时我的令牌可能会过期?
UPD:我正在使用this uploader,只是更改了外观。
答案 0 :(得分:5)
行。我懂了。
使用 Content-Type ==“application / octet-stream”成功上传文件。使用mime类型的文件在GoogleDrive端看起来像bug。 在这种情况下,我的原始文件(DNG,CR2,NEF等)存储在GoogleDrive中的mime类型不正确(因此没有预览这些文件)。
所以我不能再通过mime-type过滤文件了。
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-type或者title,而是通过fullText关键字过滤我的文件。
Query string = (fullText contains '.dng' or fullText contains '.cr2' or fullText contains '.nef').
结论:
{"error":{"errors":[{"domain":"global","reason":"backendError","message":"Backend Error"}],"code": 500,"message": "Backend Error"}}
答案 1 :(得分:2)
我认为这与原始照片文件有关,因为DRIVE会像在Google+中一样尝试convert them to JPG,除非您指定convert = false。您应该在上传API中指定不转换该文件。
这第二篇帖子说它会允许你预览文件up to 25MB,这个大小限制可能与你的麻烦有关。也许你可以尝试上传另一张小于这个尺寸的照片,以确保它不是限制。
答案 2 :(得分:0)
由于服务器很忙,我还看了几次google analytics的500次错误及其正常情况。如果我稍等一下再试一次就行了。试着阅读https://developers.google.com/drive/handle-errors#implementing_exponential_backoff这与我使用Google Analtyics API一起工作,当它到达第6步时再次获得访问权限。没有尝试使用谷歌驱动器,但后来我没有尝试上传25米文件。但我打赌这是你的问题。