我需要从Google驱动器文档(MIME类型:application / vnd.google-apps.document)中读取数据,以便可以将其进一步传递给下游进行处理。
看起来唯一的方法是首先使用files().export(fileId, MIME_TYPE.GoogleDocsDocument.toString()).getMediaHttpDownloader
下载文档
,下载后解析内容,然后使用files()。update
我尝试使用
files().get(fileId).executeMediaAndDownloadTo(outputStream)
,但不允许使用Google文件。我还尝试过挖掘他们的文档以寻找其他实现此方法的方法,但到目前为止还没有运气。
有没有办法避免下载文件?
答案 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;
}