【问题标题】:GDrive gives 500 Error on Upload, Doesn't return objectGDrive 在上传时给出 500 错误,不返回对象
【发布时间】:2019-01-20 13:46:52
【问题描述】:

我有一个谷歌上传管理器,大部分时间都可以正常工作,但是当上传大量文件时,它会中断一部分并返回 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()

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

【问题讨论】:

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


    【解决方案1】:

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

    建议的操作:使用exponential backoff,在之前添加一个检查 重试非幂等请求。

    SO post 也暗示了同样的想法。

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

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

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

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

    【讨论】:

    • 谢谢,但问题不是错误的定义,而是如何确定原因,因为它实际上并没有返回错误对象。例如,只有当媒体中断时,才可能恢复媒体,并返回一个对象,让您知道中断发生的位置。由于没有返回任何内容,因此无法继续。
    【解决方案2】:

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

    【讨论】:

    • 如何判断是mimetype转换?,我已经成功上传了几天的文件,每次这个文件都变大了。今天它达到了我无法上传的大小,并且我不断出现这样的 500 错误,没有任何解释。如果我对它进行分块,无论它的大小是多少,都会发生一些有趣的事情——除了最后一个之外,每个分块请求都会成功。
    • 不幸的是,没有返回任何信息告诉您这是一个错误的转换,我能够找到它的唯一方法是通过测试。如果您发现失败的文件类型始终相同(即使它是不同的文件),您可能会遇到转换问题。
    猜你喜欢
    • 2016-03-25
    • 1970-01-01
    • 2017-03-12
    • 1970-01-01
    • 2023-03-28
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多