2

我的 Google Drive 帐户上有文件夹,我想在特定文件夹中添加文件。我该怎么做?在示例中需要 DriveId (EXISTING_FOLDER_ID),但我不知道 DriveID 我的文件夹,我只知道名称。

4

4 回答 4

4

好的。我在 Github 上的 Drive 演示中遇到了同样的问题:https ://github.com/googledrive/android-demos

在自述文件的底部,它说:

如果你真的想运行这个示例应用程序(虽然它主要是为了你可以阅读代码而提供的),你需要为包 com.google.android.gms.drive.sample.demo 注册一个 OAuth 2.0 客户端。拥有调试密钥并将任何资源 ID 设置为您有权访问的资源 ID。资源 ID 定义在:

com.google.android.gms.drive.sample.demo.BaseDemoActivity.EXISTING_FOLDER_ID com.google.android.gms.drive.sample.demo.BaseDemoActivity.EXISTING_FILE_ID

他们并没有真正指定应该如何获取和设置 BaseDemoActivity 文件中定义的 EXISTING_FOLDER_ID 和 EXISTING_FILE_ID 常量的资源ID,在阅读了上面的 seanpj 评论后,我使用他的方法 3 来查找 DriveID,以便我可以将其添加到演示应用程序,使其正常运行。

只需在您的 PC 上转到 Drive,然后单击顶部的“链接”按钮。

谷歌驱动器上的链接

链接的一部分显示“id=XXXXXXXXXXX”。将其复制并粘贴到演示应用程序的 BaseDemoActivity 文件中。对您在云端硬盘上自己创建的文件和文件夹执行此操作。

演示应用程序现在应该成功运行。

于 2015-01-14T19:07:38.133 回答
3

@smokybob。我不知道它是否有助于解决原始问题,但根据您的评论:

这是一个代码片段,应该可以让您获得文件夹/文件 DriveId。'title'、'mime' 和 'fldr' 参数是可选的。如果您为“fldr”传递null,则搜索是全局的(在应用程序的 FILE 范围内),否则在指定的文件夹中(但不在子文件夹中)。它使用最简单的 - 'await()' 风格,必须从 UI 线程中运行。

但请注意,文件夹/文件名在 Google Drive Universe 中并不是唯一的实体。您可以在一个文件夹中拥有多个同名的文件/文件夹!

GoogleApiClent _gac;   // initialized elsewhere

//find files, folders. ANY 'null' ARGUMENT VALUE MEANS 'any'
public void findAll(String title, String mime, DriveFolder fldr) {
  ArrayList<Filter> fltrs = new ArrayList<Filter>();
  fltrs.add(Filters.eq(SearchableField.TRASHED, false));
  if (title != null)  fltrs.add(Filters.eq(SearchableField.TITLE, title));
  if (mime  != null)  fltrs.add(Filters.eq(SearchableField.MIME_TYPE, mime));
  Query qry = new Query.Builder().addFilter(Filters.and(fltrs)).build(); 
  MetadataBufferResult rslt = (fldr == null) ? 
    Drive.DriveApi.query(_gac, qry).await() : 
    fldr.queryChildren(_gac, qry).await();
  if (rslt.getStatus().isSuccess()) {
    MetadataBuffer mdb = null;
    try { 
      mdb = rslt.getMetadataBuffer();
      if (mdb != null) {
        for (Metadata md : mdb) {
          if (md == null) continue;
          DriveId dId  = md.getDriveId();      // here is the "Drive ID"         
          String title = md.getTitle();
          String mime  = md.getMimeType();
          // ...
        }
      }
    } finally { if (mdb != null) mdb.close(); } 
  }
}

一般来说,您可以从以下位置获取所需的“DriveId”:

  1. 如上面代码所示的文件/文件夹名称,或
  2. 您从“encodeToString()”获得的字符串标识符。例如,我用它来缓存 MYROOT 文件夹 ID,或者
  3. 您从“getResourceId()”获得的字符串标识符。这是您在 html 地址中看到的字符串。但由于您唯一的作用域是 FILE,因此不要指望使用它来打开您的应用未创建的内容。

2 和 3 标识符都是字符串,所以它们可能会混淆。检索驱动器 ID(通过 decodeFromString())时,标识符 2 更快。标识符 3 的检索速度较慢(通过 fetchDriveId()),但如果您需要将您的 ID 带到其他地方(例如,Apps 脚本),它会很有用。另见SO 21800257

就文件/文件夹的创建而言,我在GitHub 上有一些代码。如果您查看 awaits\MainActivity.java ... buildTree(),您将看到在构建简单文件夹树时递归地创建文件夹/文件。

于 2014-03-09T18:43:42.943 回答
3

您可以使用查询来查找文件夹

Query query = new Query.Builder().addFilter(Filters.and(
                Filters.eq(SearchableField.TITLE, "folder name"),
                Filters.eq(SearchableField.TRASHED, false))).build();

我在本教程中找到了一个示例教程 http://wiki.workassis.com/android-google-drive-api-deleted-folder-still-exists-in-query/ 他们正在异步调用

于 2016-06-23T09:57:34.383 回答
0

如果您有文件夹的元数据(或 DriveFolder 对象,您可以从中获取元数据),则只需调用getDriveId

如果您有网络资源,则可以使用 fetchDriveId 使用该资源 id获取 DriveId

于 2014-03-05T17:57:30.157 回答