【问题标题】:Insert operation with convert flag TRUE fails转换标志为 TRUE 的插入操作失败
【发布时间】:2013-02-02 15:31:43
【问题描述】:

我正在使用 xdocreport 生成 WORD 文件的报告。

从生成的报告中,我创建了一个带有 MIME-TYPE "application/vnd.openxmlformats-officedocument.wordprocessingml.document" (MS WORD - DOCX) 的 InputStreamContent 以写入 Google Drive:

// create Word file stream using xdocreport
OutputStream2InputStream outputStream = new OutputStream2InputStream(); // buffer
report.process(context, outputStream);
// create inputstream for Google Drive
InputStreamContent inputStream = new InputStreamContent("application/vnd.openxmlformats-officedocument.wordprocessingml.document",
        outputStream.getInputStream());
inputStream.setLength(outputStream.size());

编写 MSWORD 文档工作正常(CONVERT= FALSE):

File file = new File();
Insert insertOperation = service.files().insert(file, inputStream).setConvert(false);
file.setTitle("test.docx");
file.setMimeType(inputstream.getType());
File result = insertOperation.execute();

在我的 Google Drive 上创建了一个 WORD DOCX 文件。

使用 CONVERT=TRUE 编写相同的输入流失败

File file = new File();
Insert insertOperation = service.files().insert(file, inputStream).setConvert(true);
file.setTitle("test");
//file.setMimeType(inputstream.getType()); // what here ? 
File result = insertOperation.execute();

结果

1.未设置 MIME 类型时: 新创建的文件 result 具有 0 字节MIME-type: application/vnd.google-apps.kix

2.设置 mime 类型时: MIME-TYPE 设置为“application/vnd.google-apps.document”并且 convert = true,结果为 400: BAD REQUEST。

我做错了什么?

【问题讨论】:

    标签: google-drive-api


    【解决方案1】:

    这是一个常见问题。不要在请求元数据中设置 MIME 类型。 Google Drive 将决定要转换为的 MIME 类型。

    您的标记为// what here ? 的行应省略。

    【讨论】:

    • 当我省略在 Insert 实例上设置 MIME 类型时,生成的文件有 0 字节和 MIME 类型:application/vnd.google-apps.kix。还是我必须把它放在 InputStreamContent 上?
    • 在 InputStreamContent 上,您应该使用文件的实际 MIME 类型。您永远不必传递“kix” MIME 类型。
    • AFAICS,我按照你的解释做了一切......但结果文件为 0 字节 - 相同的 InputStreamContent 无需转换即可正常工作。恐怕我需要再深入一点。
    • 原来是一个愚蠢的错误,在代码的前面设置了 mime 类型。感谢您的帮助;
    • @AliAfshar 是否可以获得谷歌驱动文件的公共 url。我试过了,但我能得到下载网址
    【解决方案2】:

    您需要做的就是使用正确的 .docx MIME 类型更新您的 getType()。

    docx=>   application/vnd.openxmlformats-officedocument.wordprocessingml.document
    

    我遇到了同样的问题,这段代码解决了它!

    【讨论】:

      猜你喜欢
      • 2017-09-17
      • 2014-04-14
      • 1970-01-01
      • 2020-08-11
      • 1970-01-01
      • 1970-01-01
      • 2013-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多