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



为File设置自定义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时,相同的代码正确地上传我的文件到驱动器。

你可以设置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();

您不需要设置ID,它是在创建时由Google Drive分配的。你正在谈论的ID是你看到的字符串,当你去drive.google.com,右键单击一个对象(文件夹/文件),并选择"获取链接"。你会得到这样的东西:

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

,字符串'0B1blahblahblahblahfdR25i'是ID。

测试它。从你的drive.google.com得到它,去这个页面的底部-尝试!,将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的演示中截取的(为了解释上下文),但是那里的Api调用应该是差不多的。您实际上可以从中提取一些CRUD原语。

好运

相关内容

  • 没有找到相关文章

最新更新