2011-07-13 11 views
5

Próbuję przesłać plik kopii zapasowej z mojego serwera do mojego magazynu Google w skrypcie w języku Python. Plik kopii zapasowej jest zaszyfrowanym plikiem zip (plik gpg). Łączy się pomyślnie, ale nie przenosząc plik który się następujący błąd:Przesyłanie pliku do google docs za pomocą skryptu Python

Traceback (most recent call last): 
    File "backup.py", line 37, in <module> 
    entry = gd_client.Upload(ms, 'Backup.gpg', folder_or_uri=uri) 
    File "/usr/local/lib/python2.6/dist-packages/gdata/docs/service.py", line 306, in Upload 
    folder_or_uri) 
    File "/usr/local/lib/python2.6/dist-packages/gdata/docs/service.py", line 161, in _UploadFile 
    converter=gdata.docs.DocumentListEntryFromString) 
    File "/usr/local/lib/python2.6/dist-packages/gdata/service.py", line 1236, in Post 
    media_source=media_source, converter=converter) 
    File "/usr/local/lib/python2.6/dist-packages/gdata/service.py", line 1358, in PostOrPut 
    'reason': server_response.reason, 'body': result_body} 
gdata.service.RequestError: {'status': 400, 'body': 'Invalid request URI', 'reason': 'Bad Request'} 

Oto mój kod:

import os 
import sys 
import gdata.docs 
import gdata.docs.service 
import gdata.docs.client 

gd_client = gdata.docs.service.DocsService() 
gd_client.ClientLogin('[email protected]', 'mypassword') 

uri = '%s?convert=false' % gdata.docs.client.DOCLIST_FEED_URI 

f = open('backup.zip.gpg') 
ms = gdata.MediaSource(file_handle=f, content_type='application/octet-stream', content_length=os.path.getsize(f.name)) 
entry = gd_client.Upload(ms, 'Backup.gpg', folder_or_uri=uri) 

Jest możliwe, że plik jest zbyt duży (56MB) i mogę” t w ten sposób korzystaj z serwisu Dokumentów Google. W takim razie mam nadzieję na bardziej wyraźny komunikat o błędzie. Zastanawiam się, czy to jest problem z moim powiedzeniem "convert = false". Jest to konto Google Apps, z którego korzystam.

+1

Jeśli uważasz, że problem jest zbyt duży, dlaczego nie spróbujesz złamać pliku zip na mniejsze, powiedzmy 5mb, a następnie spróbuj je przesłać? –

+0

Niestety to nadal powoduje ten sam błąd. – Dan

+1

Czy to jest konto Google Apps ** dla firm **? – serk

Odpowiedz

2

przesyłania plików z dowolny typ są dozwolone tylko dla Google Apps for Businessrachunków. Zwykłe konto nie może przesłać tego rodzaju pliku. Zobacz this link z interfejsu API Dokumentów Google.

2

Dobra wiadomość: teraz Google Apps dla Wolnych kont można również przesyłać pliki dowolnego typu.

Trzy główne punkty tutaj:

Aby zobaczyć przykład w Pythonie, przejdź do pobierania gdata-2.0.14 i znajdź plik resumable_upload_sample.py w katalogu samples/docs.