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

时间:2018-08-13 19:01:16

标签: python rest google-api google-drive-api http-error

我有一个google上载管理器,在大多数情况下都可以正常工作,但是在上载大量文件时,它会截取一部分内容并返回500 Internal Server错误(始终在同一文件上)。

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()

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

2 个答案:

答案 0 :(得分:0)

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

  

建议的操作:使用exponential backoff,并在前面加上一个勾号   重试非幂等请求。

SO post中暗含了相同的想法。

  

指数补偿是用于网络应用程序的标准错误处理策略,在该策略中,客户端定期重试失败的请求   请求的时间越来越长。指数回退可能是   处理这些错误的好策略。

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

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

  

对于大型媒体文件,您可以使用可恢复的媒体上传来发送   文件,允许以较小的块上传文件。这是   如果您要传输大文件,并且   网络中断或其他传输的可能性   失败率很高。

答案 1 :(得分:0)

经过大量测试,我发现错误的原因是由于编码问题而导致上传期间的mimetype转换失败。除了HTTP 500外,没有返回其他任何信息,但是关闭转换解决了该问题。因此,如果您使用的是500 Internal Server error(Windows)或SSLError: [SSL: SSLV3_ALERT_BAD_RECORD_MAC] sslv3 alert bad record mac(在Mac上),并且发现它总是在同一文件上发生,请检查文件编码是否支持您的模仿类型转换正在尝试做。