我一直在密切关注Google Drive Android API的文档,并且一切都很好。我可以使用mime类型text/plain
创建新的文本文档并将其读回来。
我不能做的是创建一个原生Google" Document"或者"电子表格。"实际上,我可以根据Supported MIME Types文档将mime类型设置为application/vnd.google-apps.document
或application/vnd.google-apps.spreadsheet
来创建它们。
但是,如果我尝试将内容写入这些文档,则文档永远不会上传。
如果我尝试阅读包含内容的文档(我通过网络浏览器创建的内容),则openContents
调用失败。
同样,我可以创建text/plain
个文档并写入文档,但它们不是本机Google文档。我已经浏览了文档和示例文件,但没有描述我正在寻找的内容。
这似乎是如此基本。新的GoogleApiClient不支持这样做吗?我错过了什么或做错了什么?
以下是创建的核心代码。在尝试阅读application/vnd.google-apps.document
时,我遇到了类似的问题,但我确定这两个问题是相关的。我会饶恕"阅读"代码。
private void exportToGDriveFile() {
Drive.DriveApi.newContents(getGoogleApiClient()).setResultCallback(createNewFileCallback);
}
final private ResultCallback<ContentsResult> createNewFileCallback = new ResultCallback<ContentsResult>() {
@Override
public void onResult(ContentsResult result) {
if (!result.getStatus().isSuccess()) {
writeLog("Error while trying to create new file contents");
return;
}
String fileName = getIncrementedFileName();
MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
.setTitle(fileName)
.setMimeType("text/plain") // <-- This works! I can write and read back :)
//.setMimeType("application/vnd.google-apps.document") <-- can create if no contents are included.
//.setMimeType("application/vnd.google-apps.spreadsheet")
.setStarred(true)
.build();
writeLog("creating file: " + fileName);
// create a file on root folder
Drive.DriveApi.getRootFolder(getGoogleApiClient())
.createFile(getGoogleApiClient(), changeSet, result.getContents())
.setResultCallback(afterCreateFileCallback);
}
};
private ResultCallback<DriveFileResult> afterCreateFileCallback = new ResultCallback<DriveFileResult>() {
@Override
public void onResult(DriveFileResult result) {
if (!result.getStatus().isSuccess()) {
writeLog("Error while trying to create the file");
return;
}
DriveFile driveFile = result.getDriveFile();
writeLog("Created file " + driveFile.getDriveId());
new WriteFileAsyncTask().execute(driveFile);
}
};
private class WriteFileAsyncTask extends AsyncTask<DriveFile, Void, Boolean> {
@Override
protected Boolean doInBackground(DriveFile... args) {
DriveFile file = args[0];
try {
ContentsResult contentsResult = file.openContents(getGoogleApiClient(), DriveFile.MODE_WRITE_ONLY, null).await();
if (!contentsResult.getStatus().isSuccess()) {
return false;
}
/************************
If I try to write content here, `application/vnd.google-apps.document` files will not upload.
*************************/
String contents = "Hello World";
OutputStream outputStream = contentsResult.getContents().getOutputStream();
outputStream.write(contents.getBytes());
com.google.android.gms.common.api.Status status = file.commitAndCloseContents(
getGoogleApiClient(), contentsResult.getContents()).await();
return status.getStatus().isSuccess();
} catch (IOException e) {
// toast("IOException while appending to the output stream");
}
return false;
}
@Override
protected void onPostExecute(Boolean result) {
if (!result) {
// toast("Error while editing contents");
return;
}
// toast("Successfully uploaded Quizifications!");
}
}
答案 0 :(得分:1)
目前无法读取或编辑Google文档,电子表格或演示文稿文件的内容。它们是一种特殊类型,没有标准的二进制内容,因此您无法以与从其他文件相同的方式读取和写入文件。
但是,您可以与现有文件的元数据进行交互。
对不起,我们应该更新行为,以便明确表示不可能。
答案 1 :(得分:0)
使用HTML更新Google文档非常简单。只需在正文中使用html格式的文本(需要html标记)和内容类型作为google文档来发出api请求,然后您创建/更新的文件将作为具有所有格式选项的Google文档提供给用户。
request({
uri: 'https://www.googleapis.com/upload/drive/v2/files/'+fileId,
method: 'PUT',
qs: {
uploadType: 'media'
},
form: '<html> Hello <b>World!</b> </html>',
headers: {
'Content-Type': 'application/vnd.google-apps.document',
'Authorization': 'Bearer ' + access_token
}}, function (error, response, body){
})