如何通过Google Data API上传文件到Google Docs?

0 投票
1 回答
768 浏览
提问于 2025-04-17 03:20

我正在开发一个与Google API一起使用的应用程序,按照我的理解。

def push_to_ga(request):
    client = gdata.docs.service.DocsService()
    client.ClientLogin('account@gmail.com', 'password')

    entrys = Entry.objects.all()
    for entry in entrys:
        splitted = entry.file.split('/')
        client.UploadDocument(entry.file, splitted[-1])

    return HttpResponseRedirect('https://docs.google.com/#home')

出现了一个错误:

错误追踪信息: 文件 "/home/i159/Env/googleapi/lib/python2.6/site-packages/django/core/handlers/base.py" 中的 get_response 111. response = callback(request, *callback_args, **callback_kwargs) 文件 "/home/i159/workspace/apiroot/googleapi/../googleapi/apiapp/views.py" 中的 push_to_ga 38. client.UploadDocument(entry.file, '我的条目 #' + str(entry.id)) 文件 "/home/i159/Env/googleapi/lib/python2.6/site-packages/atom/init.py" 中的 deprecated_function 1475. return f(*args, **kwargs) 文件 "/home/i159/Env/googleapi/lib/python2.6/site-packages/gdata/docs/service.py" 中的 UploadDocument 494. folder_or_uri=folder_or_uri) 文件 "/home/i159/Env/googleapi/lib/python2.6/site-packages/gdata/docs/service.py" 中的 _UploadFile 160. extra_headers={'Slug': media_source.file_name},

异常类型:AttributeError 在 /push_to_ga/ 异常信息:'unicode' 对象没有 'file_name' 属性

我找不到关于这些方法的文档。怎么通过API把文件上传到Google Docs呢?

1 个回答

1

你正在使用哪个版本的Google API?

根据Google的文档,在1.0和2.0版本中,你需要把文档包装成一个MediaSource对象,这样才能传给上传方法。所以,我觉得你需要把:

client.UploadDocument(entry.file, splitted[-1])

替换成:

ms = gdata.MediaSource(file_path=entry.file, content_type=gdata.docs.service.SUPPORTED_FILETYPES['DOC'])
client.Upload(ms, splitted[-1])

注意:这假设你上传的是Word文件。你应该把content_type参数设置为每个文件的正确类型

如果你使用的是3.0版本,你就不需要再创建MediaSource对象了——你可以直接把文件路径、标题和mime类型传给上传方法:

client.Upload(entry.file, splitted[-1], content_type='application/msword')

上传PDF文件

如果你尝试用API的2.0版本上传PDF文件,会出现错误:

{'status': 415, 'body': 'Content-Type application/pdf is not a valid input type.', 'reason': 'Unsupported Media Type'}

这个问题可以通过在Google Code网站上的问题591的评论77中提供的解决方法来修复。只需按照那个票据中的说明,简单编辑你在site-packages/gdata/docs/services.py文件中的_UploadFile方法。做完这个修改后,PDF上传应该就能正常工作了(我试过,确实可以)。

撰写回答