文档列表API回归:更新文档(带转换)会丢失图像

Kab*_*dam 17 google-docs-api google-drive-api

使用文档列表API时,Google Docs转换似乎最近出现了问题.对现有文档条目所做的更新将无法正确转换为Google文档格式,并且不会显示文档中的图像.

重现步骤

  1. 我有一个.docx文件,有几行文字和一个图像.

  2. 使用文档列表API,我将文件作为NEW条目上传(转换为ON),它工作正常.我可以在Google文档中打开转换后的文档,看起来很不错.

  3. 接下来,使用像API这样的文档,我再次将文件作为 UPDATE原始条目上载(打开转换).现在,当我在Google Docs中打开转换后的文档时,图像丢失了.有一个空白矩形,旋转繁忙指示符出现在图像所在的位置.

附加信息

因此,当问题只发生在更新现有条目.作为全新条目上传的文件没有此问题.

这必须在过去24小时左右打破...我有一个现有的应用程序工作正常,现在它更新的所有文件都缺少他们的图像.在后端有什么东西得到更新导致它破坏了吗?

我已经使用包含各种图像的各种.docx和.doc文件对此进行了测试.

请帮助......这已经完全破了一个星期了.我想知道这是否是谷歌工程师所知道的问题,以及是否有人在研究它.

wes*_*cpy 0

(2020年10月):都2020年了,这个问题确实过时了。Google Documents List API于 2012 年被弃用,并于 2015 年关闭,由Google Drive API取代。

Drive API 能够导入(上传和转换)Word 文件,无论是创建图像还是将图像更新为 Google Docs 格式,都不会出现问题。下面是这两种情况的一些伪代码(Python)。第一个上传名为的 Word 文件,person.docx其中包含图像。上传后,会向用户显示一条消息,您可以验证图像是否在 Google 文档中。

DOCX_FILE = 'person.docx'
DOCS_MIME = 'application/vnd.google-apps.document'
    :
    : # credentials code for user acct auth (OAuth client ID) or service acct auth
    :
DRIVE = discovery.build('drive', 'v3', ...) # http= or creds= dep on auth type
body = {'name': DOCX_FILE, 'mimeType': DOCS_MIME}
res = DRIVE.files().create(media_body=DOCX_FILE, body=body,
        fields='name,mimeType').execute()
print('Uploaded "%s" (as %s)' % (res['name'], res['mimeType']))
Run Code Online (Sandbox Code Playgroud)

正如OP提到的,创建文件和以前一样完美。如果您编辑现有文档,除了像以前一样提供文件有效负载之外,您还需要提供其云端硬盘文件 ID,并调用files().update()而不是files().create(),它也可以工作:

DRIVE_ID = 'YOUR_FILE_ID'. # existing file in Drive
DOCX_FILE = 'person.docx'  # Word file to replace the above file with
DOCS_MIME = 'application/vnd.google-apps.document'
    :
    : # credentials code as above
    :
DRIVE = discovery.build('drive', 'v3', ...) # same as above
body = {'name': DOCX_FILE, 'mimeType': DOCS_MIME}
res = DRIVE.files().update(fileId=DRIVE_ID, media_body=DOCX_FILE,
        body=body, fields='name,mimeType').execute()
print('Updated "%s" (as %s)' % (res['name'], res['mimeType']))
Run Code Online (Sandbox Code Playgroud)

如果您不熟悉 Drive API,请继续阅读。为了操作云端硬盘中已有的文档,特别是面向文档的操作,您可以使用 Google 文档、表格和幻灯片 API,但要执行文件访问,例如导入/导出、复制、移动、重命名等。 ,请改用Google Drive API。如果您是 Drive API 的新手,除了上述内容之外,这里还有一些示例:

(*) - TL;DR:将纯文本文件上传到云端硬盘,导入/转换为 Google 文档格式,然后将该文档导出为 PDF。上面的帖子使用 Drive API v2;这篇后续文章描述了将其迁移到 Drive API v3,这里有一个开发人员视频,结合了“穷人的转换器”帖子。

要了解有关如何将 Google API 与 Python 结合使用的更多信息,请查看我的博客以及我制作的各种 Google 开发人员视频(系列 1系列 2 )。