我有一个Android应用,允许用户将.csv文件导出到Google云端硬盘,以便他们可以编辑它,然后将文件重新导入Android。
这曾经与旧的Google Docs api完美配合。我去年从旧的API升级到早期版本的Google云端硬盘,并且能够让它运行良好。现在,当我升级到最新版本时,我的应用程序的这个功能实际上已被破坏。我认为它是SDK权限和从Google云端硬盘分发Google表格的组合。
我上传的文件包含以下元数据:
MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
.setTitle(fileName)
.setMimeType("text/csv")
.setStarred(true)
.build();
然后,上传的文件会显示蓝色的Google文档图标。当用户访问Google云端硬盘进行编辑时,他们只能预览"该文件。当他们正在预览时,他们可以打开"打开"该文档使用Google表格然后创建一个新文档(这个新文档有绿色Google表格图标),因为谷歌SDK有这个新的"功能" (引自:https://developers.google.com/drive/android/queries):
注意:Android Drive API仅适用于 https://www.googleapis.com/auth/drive.file范围。这仅仅意味着 用户使用您的应用程序打开或创建的文件可以是 与查询匹配。
我无法看到新文件,因此无法检索用户的编辑内容。
有没有我可以直接上传为Google表格文件?或者也许是我完全错过的另一种解决方案?
编辑
以下是我使用Google云端硬盘SDK上传代码的示例:
在我的AsyncTask的构造函数中,我创建了google客户端:
mGoogleApiClient = new GoogleApiClient.Builder(activity)
.addApi(Drive.API)
.addScope(Drive.SCOPE_FILE)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
mGoogleApiClient.connect();
然后在doInBackground方法中我做这样的事情:
DriveApi.DriveContentsResult cResult = Drive.DriveApi.newDriveContents(mGoogleApiClient).await();
OutputStream os = cResult.getDriveContents().getOutputStream();
InputStream is = new FileInputStream(f);
//write the input stream to the output stream
....
DriveFileResult exportResult = Drive.DriveApi.getRootFolder(mGoogleApiClient)
.createFile(mGoogleApiClient, changeSet, cResult.getDriveContents())
.await();
这非常简单(一旦你搞清楚了),似乎没有告诉SDK我希望这个文档是" Google Sheet"而不是" Google Doc"
谢谢!
-Aaron
答案 0 :(得分:1)
您应该将原始内容明确转换为电子表格,否则最终会直接上传到您的云端硬盘帐户中。请尝试以下代码:
java.io.File fileContent = new java.io.File(csvfilepath);
FileContent mediaContent = new FileContent("text/csv", fileContent);
// File's metadata.
File body = new File();
body.setTitle(fileContent.getName());
body.setMimeType("text/csv");
Insert request = service.files().insert(body, mediaContent);
request.setConvert(true);
File file = request.execute();