我有一个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()
问题是,发生此错误时,它是引发异常的结果,而不是存储在结果中的任何东西(实际上,结果将不存在)。因此,我无法获得任何信息。我认为这可能与文件太大或其他内容有关,但由于我没有信息,我无法恢复。有想法吗?
答案 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上),并且发现它总是在同一文件上发生,请检查文件编码是否支持您的模仿类型转换正在尝试做。