使用Android SDK将CSV文件上传为Google表格

时间:2015-01-01 19:28:18

标签: android google-drive-api google-drive-android-api

我有一个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

1 个答案:

答案 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();