Загрузите огромный файл на Google Диск с помощью PyDrive

В настоящее время я использую PyDrive для загрузки своей резервной копии (файл .tar) на диск Google.

Есть ли что-то особенное в этой библиотеке для загрузки огромного файла на Google Диск (около 5 ГБ). В документации Google Drive API сказано, что мы должны использовать возобновляемую загрузку? https://developers.google.com/drive/web/manage-uploads

Моя проблема в том, что когда я пытаюсь отправить огромный файл, скрипт выполняется без ошибок, очень быстро, и файл не появляется в GoogleDrive. Однако, если я сделаю это с небольшим файлом размером около 100 МБ, все будет работать отлично ...

Мой код следующий:

def upload(self, backupFile, backupFileName):

    json_data=open(os.path.join(__location__, 'client_secrets.json'))

    data = json.load(json_data)

    """Email of the Service Account"""
    SERVICE_ACCOUNT_EMAIL = data['client_email']

    """Path to the Service Account's Private Key file"""
    SERVICE_ACCOUNT_PKCS12_FILE_PATH = os.path.join(__location__, 'key.p12')

    f = file(SERVICE_ACCOUNT_PKCS12_FILE_PATH, 'rb')
    key = f.read()
    f.close()

    credentials = SignedJwtAssertionCredentials(SERVICE_ACCOUNT_EMAIL, key,
        scope='https://www.googleapis.com/auth/drive', sub='email')
    http = httplib2.Http()
    credentials.authorize(http)

    gauth = GoogleAuth()
    gauth.credentials = credentials

    drive = GoogleDrive(gauth)

    file1 = drive.CreateFile({'title': backupFileName, "parents" : [{"id":"0B7FoN03AUUdZVlNETEtWLS1VTzQ"}]} )  # Create GoogleDriveFile instance with title 'Hello.txt'

    file1.SetContentFile(backupFile);
    file1.Upload()

Когда я пытаюсь отправить большой файл, никаких ошибок не возвращается. Скрипт python просто заканчивается, ничего не показывая ...


person Etienne Noël    schedule 04.12.2014    source источник
comment
не ответ, но я бы не стал отправлять большие файлы на Диск. Слишком много вопросов. Esp для tar, я бы разделил (1) его на куски по 100 МБ, а затем снова собрал при загрузке с помощью cat (1)   -  person pinoyyid    schedule 05.12.2014
comment
Думаю, вы правы, я, наверное, воспользуюсь Amazon Glacier.   -  person Etienne Noël    schedule 05.12.2014


Ответы (2)


Для некоторых типов файлов существуют ограничения в 100 МБ.

https://support.google.com/drive/answer/37603?hl=en

Ограничения по размеру

Документы: 1 024 000 знаков, независимо от количества страниц и размера шрифта. При использовании новой версии Диска (с красной кнопкой «Создать» слева) загруженные файлы документов, преобразованные в формат документов Google, не могут превышать 50 МБ. При использовании классической версии Диска вы не можете конвертировать файлы документов размером более 10 МБ.

Таблицы: 400 000 ячеек, максимум 256 столбцов на листе. Загруженные файлы электронных таблиц, преобразованные в формат электронных таблиц Google, не могут быть больше 100 МБ и должны содержать менее 400 000 ячеек и 256 столбцов на листе.

Дополнительная информация об ограничениях на размер электронных таблиц Все ограничения для электронных таблиц, упомянутые выше, были удалены в новой версии Google Sheets. Новая версия Google Таблиц должна поддерживать 2 миллиона ячеек данных, однако учтите, что очень большие электронные таблицы могут иметь более низкую производительность. Подробнее о переходе на новую версию Google Таблиц. Презентации: Презентации, созданные в Google Slides, могут иметь размер до 100 МБ. Загруженные файлы презентаций, преобразованные в Google Slides, также могут иметь размер до 50 МБ.

Рисунки: мы никогда не видели, чтобы кто-нибудь делал слишком большой рисунок (но это не вызов).

Другие файлы: файлы, которые вы загружаете, но не конвертируете в формат Google Документов, Таблиц или Презентаций, могут иметь размер до 5 ТБ каждый.

В Google Диске, Gmail и Google+ Фото каждому пользователю предоставляется 15 ГБ бесплатного пространства для хранения, а также можно приобрести дополнительное пространство для хранения.

person John La Rooy    schedule 04.12.2014
comment
Как это вообще ответ? Каждый раз, когда API Google возвращают ошибки, они генерируют исключение на pyDrive. Это, безусловно, ошибка pyDrive, поскольку она еще даже не доходит до части загрузки. - person Allison; 30.07.2017

Вы можете загрузить любой размер, передав файл, подобный объекту, в .content GoogleDriveFile.

file1.content = fileobj

по моему опыту он читает 8192 байта в момент времени, сначала он ищет 0,2, затем ищет 0,0, затем вызывает tell () перед каждым чтением (8192), а также вызывает read (8192) в seek (0,2) +1

поэтому вам нужно поместить методы read (), tell () и seek () в объект, вероятно, это из части http.py api

person Edo Edo    schedule 31.07.2019