根据我的理解,我开发了一个适用于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')
出错:
回溯: 在get_response中输入文件“/home/i159/Env/googleapi/lib/python2.6/site-packages/django/core/handlers/base.py” 111. response = callback(request,* callback_args,** callback_kwargs) 在push_to_ga中输入文件“/home/i159/workspace/apiroot/googleapi/../googleapi/apiapp/views.py” 38. client.UploadDocument(entry.file,'我的条目#'+ str(entry.id)) 在deprecated_function中输入文件“/home/i159/Env/googleapi/lib/python2.6/site-packages/atom/init.py” 返回f(* args,** kwargs) 在UploadDocument中输入文件“/home/i159/Env/googleapi/lib/python2.6/site-packages/gdata/docs/service.py” 494. folder_or_uri = folder_or_uri) _UploadFile中的文件“/home/i159/Env/googleapi/lib/python2.6/site-packages/gdata/docs/service.py” 160. extra_headers = {'Slug':media_source.file_name},
异常类型:/ push_to_ga /的AttributeError 异常值:'unicode'对象没有属性'file_name'
我找不到带有方法描述的文档。如何通过API将文件上传到Google文档?
答案 0 :(得分:1)
您使用的是哪个版本的Google API?
根据Google documentation,对于版本1.0和2.0,您必须将文档包装为MediaSource对象,以便将其传递给Upload方法。所以,我认为你需要替换:
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
参数设置为correct type。
如果您正在使用version 3.0,则不再需要创建MediaSource对象 - 您只需将路径名,标题和mime类型直接传递给Upload方法:
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代码网站上第591期comment 77中显示的解决方法修复此问题。简单地编辑_UploadFile
文件中的site-packages/gdata/docs/services.py
方法,如该票证上所示。一旦你做了这个改变,PDF上传应该可以正常工作(我已经检查了这个&它对我有用)。