为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原语。
好运