문제

GAE 응용 프로그램에서 Google 문서 도구에 파일 / 문서를 업로드해야합니다.이것은 충분히 간단해야하지만 API에 많은 어려움이 있습니다.

컨텍스트 :

import gdata.docs.service

client = gdata.docs.service.DocsService()
client.ClientLogin('gmail', 'pass')

ms = gdata.MediaSource(#what goes in here?)
client.Upload(media_source=ms, title='title')
.

업로드하려면 client.Upload()를 사용하여 MediaSource (랩퍼) 객체를 매개 변수로 사용합니다.그러나 MediaSource()는 문서에 대한 FilePath 만 수락하는 것 같습니다. 'C:/Docs/ex.doc'.

파일 시스템이없는 GAE가 있기 때문에 BlobStore 또는 Direct URL을 통해 파일에만 파일에 액세스 할 수 있습니다.그러나 어떻게 그 사실을 MediaSource()에 입력합니까?

Java의 방법 MediaByteArraySource()를 사용하여이를 수행하지만 파이썬은 아무 것도 없습니다.

도움이 되었습니까?

해결책

누구든지 호기심이지면 문서 목록 API를 사용 하여이 문제를 해결 한 방법은 다음과 같습니다.

SDK 드라이브를 사용하고 싶지 않았습니다.OAuth 속임수가 필요없이 실수 / 로그인 목록 API가 훨씬 간단합니다.이것은 GDATA 파이썬 라이브러리 의 버전 2.0.14를 사용하고 있습니다.현재 버전 (2.0.17)이 아닌 것은 더 간단한 업로드 메커니즘이있는 것 같습니다.

다양한 소스와 재판 및 오류와 함께이 작업을 수행해야하지만 2.0.14에 대해서는 약간 더 많은 (여전히 스파 스) 문서가 더 많이 있습니다.단점은이 버전으로 PDF를 업로드 할 수 없다는 것입니다.이 코드 은 2.0.17에서 작동하지 않습니다.

여기 코드가 있습니다.

import gdata.docs.service
import gdata.docs.data
from google.appengine.api import urlfetch

# get file from url
result = urlfetch.fetch('http://example.com/test.docx')
headers = result.headers
data = result.content

# authenticate client object
client = gdata.docs.service.DocsService()
client.ClientLogin('gmail', 'password')

# create MediaSource file wrapper
ms = gdata.MediaSource(file_handle=result.content, 
content_type=headers['content-type'], 
content_length=int(headers['content-length']))

# upload specific folder, return URL of doc
google_doc_name = 'title'
folder_uri = '/feeds/folders/private/full/folder:j7XO8SJj...'
entry = client.Upload(ms, google_doc_name, folder_or_uri=secret.G_FOLDER_URI)
edit_url = entry.GetAlternateLink().href
.

다른 팁

Google 드라이브 SDK 문서에는 App Engine에서 실행되는 파이썬으로 작성된 완전한 샘플 응용 프로그램이 포함됩니다.

https://developers.google.com/drive/examples/python

구현에 대한 참조로 사용할 수 있으며 앱 엔진에서 파일을 저장하는 방법을 확인할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top