通过Python脚本将文件上传到Google文档

5 投票
2 回答
2894 浏览
提问于 2025-04-16 21:25

我正在尝试通过一个Python脚本,把我服务器上的备份文件上传到我的Google云存储。这个备份文件是一个加密的压缩文件(gpg文件)。连接是成功的,但在传输文件时失败了,出现了以下错误:

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'}

这是我的代码:

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

gd_client = gdata.docs.service.DocsService()
gd_client.ClientLogin('me@myemail.com', '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)

可能是因为文件太大了(56MB),我不能用这种方式上传到Google文档存储。不过如果真是这样,我希望能收到更明确的错误信息。我在想,是不是我设置的'convert=false'有问题。我使用的是一个Google Apps账户。

2 个回答

2

好消息:现在谷歌应用的免费账户也可以上传任何类型的文件了。

这里有三个关键点:

如果想看一个Python的例子,可以去下载gdata-2.0.14,然后在samples/docs目录下找到resumable_upload_sample.py。

2

上传任何类型的文件只允许使用Google Apps商业账户。普通账户是不能上传这种文件类型的。想了解更多,可以查看这个链接,这是关于Google文档API的说明。

撰写回答