如何通过Google Drive REST API获取Google文档的文本内容

时间:2019-05-21 00:46:59

标签: java rest google-drive-api

我需要从Google驱动器文档(MIME类型:application / vnd.google-apps.document)中读取数据,以便可以将其进一步传递给下游进行处理。

看起来唯一的方法是首先使用files().export(fileId, MIME_TYPE.GoogleDocsDocument.toString()).getMediaHttpDownloader下载文档 ,下载后解析内容,然后使用files()。update

上传带有该文档内容的新文件

我尝试使用 files().get(fileId).executeMediaAndDownloadTo(outputStream),但不允许使用Google文件。我还尝试过挖掘他们的文档以寻找其他实现此方法的方法,但到目前为止还没有运气。

有没有办法避免下载文件?

1 个答案:

答案 0 :(得分:0)

我发现我试图将文档导出为google doc,这就是为什么在尝试使用executeMediaAndDownloadTo方法时出现错误的原因。为此,需要将其导出为纯文本或其他非Google格式。我确定这会导致某种格式问题,但是应该可以解决这些问题。这是我最后得到的结果的基本用法。

    public void updateGoogleDocFile(String fileId, String newContent) throws IOException
{
    try {
        //First retrieve the file from the API as text file
        java.io.File tempDataFile = java.io.File.createTempFile("googleDocsIncomingFile", ".txt");
        OutputStream os = new FileOutputStream(tempDataFile);
        //Convert data to bytes and write to new file
        byte[] fileBytes = downloadGoogleDocFile(fileId).toByteArray();
        os.write(fileBytes);
        //Get new data to append, convert to bytes, and write to file
        byte[] newConentBytes = newContent.getBytes();
        os.write(newConentBytes);
        os.flush();
        os.close();

        //File's new metadata.
        File newFile = new File();
        //newFile.setName(fileName);
        //newFile.setDescription("mydescription");
        //newFile.setMimeType(MIME_TYPE.GoogleDocsDocument.toString());

        // Send the request to the API.
        FileContent mediaContent = new FileContent(MIME_TYPE.GoogleDocsDocument.toString(), tempDataFile);
        SERVICE.files().update(fileId, newFile, mediaContent).execute();

      } catch (IOException e) 
    {
        System.out.println("An error occurred while trying to update the google docs file: " + e);
      }
}

public ByteArrayOutputStream downloadGoogleDocFile(String fileId) throws IOException
{
    Export export = SERVICE.files().export(fileId, MIME_TYPE.PlainText.toString());
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    export.executeMediaAndDownloadTo(out);
    return out;
}