如何使用Python将.docx文件上传到GoogleDrive?

时间:2019-06-05 07:54:53

标签: python file-upload scripting google-drive-api

我写了一个简单的脚本将.docx文件上传到我的GoogleDrive帐户。除文件外,它都工作正常。身份验证有效,上传文件有效。我在编码方面遇到了一些麻烦,但是现在使用Latin-1,我可以上传文件了,没有任何错误。但是,上传后,只有一个无标题文档具有以下内容:

[Content_Types] .xml l“%3 ^ i7 +%p)O 5} nH” t4Q + | T \ y _rels / .rels jH [{l0 /%word / _rels / document.xml.rels}-;} PB [^^l :>S!?p (!O>z word/document.xml )Zb#~J K{N$ 7R'~/ $]t# V-wZ TMco %NPB5 ~e!(m zJSC aPdO4 Jr#Cv l%|Y AxQT;K3[ word/theme/theme1.xml p{{<F! :@q" ?~|f hNC- 055B jf;a ssFb dZ#QZn: ]{,n t}Vz}1 !(~X "(<Ik^> o[HD kW:A word/settings.xml rZiidm &sY5 \w'5>X ^JL\ I'I6 9FVM v8:y- o9E1G "ogH::nM word / fontTable.xml WkU + PlQ(!IX(* +> _ ze | PXPD OJK?eK#83> word / webSettings.xml Bk“ 15i I?| RjRlq docProps/app.xml X2<$ I3S.u docProps/core.xml P nQ d \ l2 )C5 $ Tehk J06t UUA5iQ 10Tse >yx\-P word/styles.xml IPL0 U&dz2 5&{K 5IwM ,x9fY( fMNF< {2bjkrj G!vMD -TA{ ~TAG 0Epr 9F{7w x0-d x^(G ynL" fl9g2z Z{Jtx [z^| Q)aaT2X )aD[ qfaT z#B^ -iwJ x_}[ I]Qx3 eTHA cTHA py}) t /5DyK hnB_ )5.[ %5.[ /5.[ eKmR )5.[ CfmmV RyxS%u u}nY xegY'&m] n [Content_Types] .xmlPK _rels / .relsPK字/_rels/document.xml.relsPK字/document.xmlPK字/主题/theme1.xmlPK字/settings.xmlPK字/ fontTable.xmlPK word / webSettings.xmlPK RjRlq docProps / app.xmlPK docProps / core.xmlPK word / styles.xmlPK

如何使脚本处理.docx格式?我读到.docx文件实际上是zipfiles,对吗?

另一个问题: 如何在特定的GoogleDrive文件夹中上传文件?我必须在我的GoogleDrive-API项目中指定吗?

先谢谢您了:)

from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
import os

g_login = GoogleAuth()
g_login.LocalWebserverAuth()
drive = GoogleDrive(g_login)

test = "Path to my BA_UploadTest.docx"
with open(test, "r", encoding="Latin-1")as file:
  fn = os.path.basename(file.name)
  file_drive = drive.CreateFile({'BA_UploadTest.docx':     os.path.basename(file.name)})
file_drive.SetContentString(file.read())
file_drive.Upload()
print('File upload successful!')

1 个答案:

答案 0 :(得分:0)

通过使用Google Drive API Documentation中提供的Python快速入门代码,您可以通过在请求中指定文件的MIME类型来将文件上传到Google云端硬盘,而不必依赖于指定的默认NoneMediaFileUpload class中。

The MIME Type for .docx filesapplication/vnd.openxmlformats-officedocument.wordprocessingml.document,因此可以这样设置。使用以下代码,我能够将.docx文件上传到我的Google云端硬盘,而没有任何编码或可读性问题:

import authentication
from googleapiclient.discovery import build
from googleapiclient.http import MediaFileUpload

#...

def docxDriveUpload(service):

    file_metadata = {'name': 'demo.docx'}
    media = MediaFileUpload('demo.docx', mimetype='application/vnd.openxmlformats-officedocument.wordprocessingml.document')

    file = service.files().create(body = file_metadata, media_body = media, fields = 'id').execute()

    print 'File upload successful! File ID: %s' % file.get('id')

为了将文件上传到云端硬盘中的特定文件夹,您需要在上传查询中使用唯一的文件夹ID。您可以通过访问drive.google.com,在浏览器视图中打开文件夹,然后在URL中的/ folders /之后复制字符串来获取此信息。 https://drive.google.com/drive/u/0/folders/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX