GDrive выдает ошибку 500 при загрузке, не возвращает объект

У меня есть диспетчер загрузки Google, который в большинстве случаев работает нормально, но при загрузке большого количества файлов он частично обрывается и возвращает ошибку внутреннего сервера 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()

Проблема в том, что когда возникает эта ошибка, возникает исключение, а не что-то, что сохраняется в результате (на самом деле результат не будет существовать). Таким образом, я не могу получить никакой информации о нем. Я думаю, это может быть связано с тем, что файл слишком большой или что-то в этом роде, но я не могу возобновить, потому что у меня нет информации. Мысли?


person Elliptica    schedule 13.08.2018    source источник


Ответы (2)


В документации Drive API указано, что «500: Backend Error» — это непредвиденная ошибка, возникшая при обработке запроса.

Предлагаемое действие: используйте экспоненциальную отсрочку, включите проверку перед повторной попыткой неидемпотентных запросов.

Та же идея подразумевалась в этом сообщении SO.

Экспоненциальная отсрочка – это стандартная стратегия обработки ошибок для сетевых приложений, в которой клиент периодически повторяет неудачный запрос в течение увеличивающегося промежутка времени. Экспоненциальная отсрочка может быть хорошей стратегией для обработки этих ошибок.

Это сообщение SO также может помочь в загрузке огромный файл.

Было предложено использовать возобновляемый носитель загружать или загружать фрагментами при загрузке.

Для больших медиафайлов вы можете использовать возобновляемую загрузку медиафайлов для отправки файлов, что позволяет загружать файлы небольшими фрагментами. Это особенно полезно, если вы передаете большие файлы, и высока вероятность прерывания сети или какого-либо другого сбоя при передаче.

person MαπμQμαπkγVπ.0    schedule 14.08.2018
comment
Спасибо, но проблема заключалась не в определении ошибки, а в том, как определить, почему, поскольку на самом деле она не возвращает объект ошибки. Например, возобновление мультимедиа возможно только в том случае, если при его разрыве возвращается объект, который позволяет узнать, где произошел разрыв. Поскольку ничего не возвращается, невозможно продолжить. - person Elliptica; 15.08.2018

После долгих тестов я обнаружил, что причиной ошибки было неудачное преобразование MIME-типа во время загрузки из-за проблемы с кодировкой. Никакой другой информации, кроме HTTP 500, не возвращается, но отключение преобразования решило проблему. Поэтому, если вы получаете 500 Internal Server error (Windows) или SSLError: [SSL: SSLV3_ALERT_BAD_RECORD_MAC] sslv3 alert bad record mac (на Mac) и замечаете, что это всегда происходит в одном и том же файле (файлах), убедитесь, что кодировка вашего файла поддерживает тип преобразования mimetype, который вы пытаетесь сделать.

person Elliptica    schedule 15.08.2018
comment
Как узнать о преобразовании mimetype?, Я успешно загружаю файл в течение нескольких дней, каждый раз этот файл становится больше. Сегодня он достиг размера, который я не могу загрузить, и у меня постоянно такая ошибка 500 без каких-либо объяснений. Если я разбиваю его на меньший размер, происходит что-то интересное - каждый запрос чанка выполняется успешно, кроме последнего. - person miguelfg; 20.11.2018
comment
К сожалению, нет никакой информации о том, что это плохое преобразование, единственный способ, которым я смог найти это, - это тестирование. Если вы заметили, что всегда происходит сбой одного и того же типа файла (даже если это другой файл), у вас может возникнуть проблема с преобразованием. - person Elliptica; 27.11.2018