GDrive 在上传时给出 500 错误,不 return 对象

GDrive gives 500 Error on Upload, Doesn't return object

我有一个 google 上传管理器,大部分时间都可以正常工作,但是当上传大量文件时,它会中途中断并且 returns 出现 500 内部服务器错误(始终打开同一个文件)。

media_body = MediaFileUpload(filepath, mimetype=mimeType_in, resumable=True)

if create == True:   # CREATE 
    result = self.service.files().create(
                                            body=meta,
                                            media_body=media_body).execute()
else:   # REPLACE
    result = self.service.files().update(
                                        body=meta,
                                        media_body=media_body,
                                        fileId=fileID).execute()

问题是当这个错误发生时,抛出的是异常,而不是存储在结果中的任何东西(事实上,结果将不存在)。因此,我无法获得有关它的任何信息。我认为这可能与文件太大或其他原因有关,但我无法恢复,因为我没有信息。想法?

在 Drive API 文档中,指出“500:后端错误”是处理请求时发生的意外错误。

Suggested action: Use exponential backoff, include a check before retrying non-idempotent requests.

这个SO post中暗示了同样的想法。

Exponential backoff is a standard error handling strategy for network applications in which the client periodically retries a failed request over an increasing amount of time. Exponential backoff may be a good strategy for handling those errors.

This SO post 也可以帮助上传大文件。

建议上传时使用resumable media upload or chunked upload

For large media files, you can use resumable media uploads to send files, which allows files to be uploaded in smaller chunks. This is especially useful if you are transferring large files, and the likelihood of a network interruption or some other transmission failure is high.

经过多次测试,我发现错误的原因是上传过程中由于编码问题导致mimetype转换失败。除了 HTTP 500 之外没有返回其他信息,但是关闭转换解决了这个问题。因此,如果您得到 500 Internal Server error(Windows)或 SSLError: [SSL: SSLV3_ALERT_BAD_RECORD_MAC] sslv3 alert bad record mac(在 Mac 上)并且您注意到它总是出现在同一个文件上,请检查您的文件编码支持您尝试进行的那种 mimetype 转换。