我应该遵循哪些规则来设置文件的自定义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时,相同的代码会将我的文件正确上传到云端硬盘。
答案 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 时看到的字符串,右键单击对象(文件夹/文件),然后选择“获取链接”。你会得到类似的东西:
字符串' 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原语。
祝你好运