将文件从blobstore上传到Google云端硬盘

时间:2013-08-23 11:33:49

标签: python google-app-engine google-drive-api blobstore

我想上传一个我在blobstore中的文件,我希望用Python发送给我的aplication用户。对于这个用户,我有帐户“xxx@gmail.com”的名称和他们的密码。我怎么能做到这一点?

我使用它,但不起作用:

    def subirArchivoDrive (self,f):
    # Create a client class which will make HTTP requests with Google Docs server.
    client = gdata.docs.service.DocsService()
    # Authenticate using your Google Docs email address and password.
    client.ClientLogin('admin@onohat.es', 'xxxxxxxxxx')
    urlfetch.set_default_fetch_deadline(45)
    ms = gdata.MediaSource(file_path=f, content_type="text/plain")
    client.UploadDocument(ms, "SERENOPROBANDO", f)

错误发生在行中:ms = gdata.MediaSource(file_path = f,content_type =“text / plain”)和“f”是:

        self.fileName = files.blobstore.create(mime_type='application/octet-stream',_blobinfo_uploaded_filename=nombreCSV)

错误是:

2013-08-23 13:32:24.859 Traceback(最近一次调用最后一次): E 2013-08-23 13:32:24.859   在start_new_thread中输入文件“/base/data/home/runtimes/python/python_dist/lib/python2.5/dummy_thread.py”,第51行 E 2013-08-23 13:32:24.859     功能(* args,** kwargs) E 2013-08-23 13:32:24.859   文件“/base/data/home/apps/s~ono-hat-vv2/1.369704550404323662/src/exportacion.py”,第271行,原文 E 2013-08-23 13:32:24.859     self.subirArchivoDrive(self.fileName) E 2013-08-23 13:32:24.859   subirArchivoDrive中的文件“/base/data/home/apps/s~ono-hat-vv2/1.369704550404323662/src/exportacion.py”,第343行 E 2013-08-23 13:32:24.859     ms = gdata.MediaSource(file_path = f,content_type =“text / plain”) E 2013-08-23 13:32:24.859   在 init 中输入文件“/base/data/home/apps/s~ono-hat-vv2/1.369704550404323662/gdata/init.py”,第92行 E 2013-08-23 13:32:24.859     self.setFile(file_path,content_type) E 2013-08-23 13:32:24.859   在setFile中输入文件“/base/data/home/apps/s~ono-hat-vv2/1.369704550404323662/gdata/init.py”,第103行 E 2013-08-23 13:32:24.859     self.file_handle = open(file_name,'rb') E 2013-08-23 13:32:24.859 IO错误:[错误13]权限被拒绝:“/ Blob存储区/可写:AD8BvukgB3Fn-zPXCfo-R3MWqu0IL-WBaL6Pa1BbxTL9gGpC5mrmyRMWIbaVUYT1kPoFY1ykhe8GUVV_c1pmm7jlDRruK1UFT906QI-L6qyzgY1JASuOztZhtN3AleoU4VWIJlGNqkC9ykrToM8TaV_TqfNZEmLNDptpHrKl_IZlU_tnkfieihAizYT9ri7-fNl2LMHSMC4w9BhY3BKJs9jDnGnX91B9bqkbSty-G2sbLRAZZFo1it2nwgQxJdW9F4wqn2h9_Lg6fjka_myXLUrVWrQpc9V9sB3xX_NAY1YJ5QXDgP3cPKKg-doykPO4lIhTqRqZ2zyFUx-zRUJbcyzTMM_u9SmGGeVFMwLpTGEhuX9zA_N9_dMbPnxoV3Sd5ExkYZ1AZUbma6ZZmIJe-R2T4Htb5DbXDDtrrSojRx5Qgyio25tlP5h6sZSUrxvRT0TQK7IgjZxHSli3iagS7EEckcFe3Vp4t97BBHa-Bo0cPh3A4KZ5BFpRz0cP_dG9ntZfe7W1VBhCGZ6oyotzcFUXJUBMZal0rJ56zRIFIdIOnqbZf-PSC3RWp5F-oRbABnRnnRF4Rm3e1I1XGHWkZ2mX_kIBSoJKC8CxhZwRyInmbxcv2kqd1z53CjIW1vRH3_r0n6QhpfARqJc3vQ7Jhsxeycy_SQTuBKOfkXXTXAGdengBZ7qPi3nWZw-mCbnS9SgvoANd99X3hoUK2DfNJScWXLQ2BsPoUTO07ubNJwRJC86HRlLmNM5ToKYuRvPtmPpW9imht5uqIKpTx-2tcmArQNAHy9eYaSXzZsI5PAipl-CwgUkfGUqmU1svFvcM585X7XL3zt5P44pPUQqSsKE8GFNAxKWwSLp46p-qkxLBVvo7UwstYTja7SgX9L2cn89hptHRq4C7Rzy1u3r5i4HawvrFDeT5fSh9R-feHOqn dQCS16bAFDKaknOZdSLX0iidGzyGEam_ZCMQneLm5GiXsu79q7RNUw'

问候。

1 个答案:

答案 0 :(得分:0)

您的代码存在一些问题。

MediaSource会收到file_pathfile_handle。如果提供了file_path,则它必须是文件系统中可读文件的路径。或者,您可以提供像{对象(打开的文件)这样的文件作为file_handle。请参阅documentationsource

blobstore.create是一个创建文件名的函数,只能使用blobstore服务进行写入,实际上已弃用。

如果您已在blobstore中拥有该文件,则需要使用BlobInfo.openms = gdata.MediaSource(file_handle=blobinfo.open(), content_type="text/plain")

另外,我希望粘贴的密码不是真正的密码。请注意,询问用户密码并不是一个好习惯,而应该使用OAuth。

另请注意,某些gdata apis已替换为更现代的版本,在本例中为Drive api。看看这个complete python example