Google Drive API:提供的文件ID不可用

时间:2015-08-27 02:24:45

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

我应该遵循哪些规则来设置文件的自定义ID?我试过短" 12345"," abcde",44个字符的字母数字字符串,UUID.randomUUID()。toString()(带/不带短划线) - 所有尝试返回"提供的文件ID不可用"。我找不到任何记录的要求。代码:

Drive drive = new Drive.Builder(AndroidHttp.newCompatibleTransport(), new GsonFactory(), credentials).build();
FileContent mediaContent = new FileContent("image/png", tempFile);
File body = new File();
body.setId(...);
body.setTitle(...);
body.setMimeType("image/png");
File result = drive.files().insert(body, mediaContent).execute();

回应:

400 Bad Request
{
    "code": 400,
    "errors":
    [{
        "domain": "global",
        "location": "file.id",
        "locationType": "other",
        "message": "The provided file ID is not usable",
        "reason": "invalid"
    }],
    "message": "The provided file ID is not usable"
}

当我尝试设置ID时,相同的代码会将我的文件正确上传到云端硬盘。

2 个答案:

答案 0 :(得分:5)

您可以设置ID,但必须使用Google为您提供的预生成ID。 我遇到了同样的问题,所以我潜入了javadoc,偶然发现了GeneratedIds类。这是适用于我的代码:

    int numOfIds = 20;
    GeneratedIds allIds = null;
    try {
        allIds = driveService.files().generateIds()
                .setSpace("drive").setCount(numOfIds).execute();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    List<String> generatedFileIds = allIds.getIds();

答案 1 :(得分:1)

您没有设置ID,它是由Google云端硬盘在创建时分配的。您正在谈论的ID是您在转到 drive.google.com 时看到的字符串,右键单击对象(文件夹/文件),然后选择“获取链接”。你会得到类似的东西:

  

https://drive.google.com/open?id=0B1blahblahblahblahfdR25i

字符串' 0B1blahblahblahblahfdR25i '是ID。

测试一下。从 drive.google.com 获取,转到bottom this page - TryIt!,将 0B1blahblahblahblahfdR25i 粘贴到 fileId 字段中。

回到你的问题。你显然是在尝试创建一个文件,试试这个:

com.google.api.services.drive.Drive mGOOSvc:
...
/**************************************************************************
   * create file in GOODrive
   * @param prnId  parent's ID, (null or "root") for root
   * @param titl  file name
   * @param mime  file mime type
   * @param file  file (with content) to create
   * @return      file id  / null on fail
   */
  static String createFile(String prnId, String titl, String mime, java.io.File file) {
    String rsId = null;
    if (mGOOSvc != null && mConnected && titl != null && mime != null && file != null) try {
      File meta = new File();
      meta.setParents(Arrays.asList(new ParentReference().setId(prnId == null ? "root" : prnId)));
      meta.setTitle(titl);
      meta.setMimeType(mime);

      File gFl = mGOOSvc.files().insert(meta, new FileContent(mime, file)).execute();
      if (gFl != null)
        rsId = gFl.getId();
    } catch (Exception e) { UT.le(e); }
    return rsId;  
  } 

返回 rsId 是您要查找的ID。

取自Android demo here(解释上下文),但Api调用应该几乎相同。你实际上可以从那里拉出一些CRUD原语。

祝你好运