Java 谷歌驱动API查询时,为什么删除的文件仍显示在结果中
我正在做一个服务自动生成文件,并上传到谷歌驱动器使用SpringBoot和Java8。这是另一个更大服务的外部服务 我正在使用的谷歌环境:Java 谷歌驱动API查询时,为什么删除的文件仍显示在结果中,java,spring-boot,google-drive-api,google-api-java-client,google-account,Java,Spring Boot,Google Drive Api,Google Api Java Client,Google Account,我正在做一个服务自动生成文件,并上传到谷歌驱动器使用SpringBoot和Java8。这是另一个更大服务的外部服务 我正在使用的谷歌环境: 具有1个文件夹名称的Google帐户:reports 谷歌账户A中对文件夹报告具有最高访问权限和修改权限的服务账户B 服务帐户密钥C由服务帐户B创建 在文件夹报告中有一些文件和文件夹,我通常是通过用户界面使用google帐户A删除的(删除然后清空垃圾)。当我使用服务帐户密钥C进行查询时,那些我被删除的文件和文件夹仍然显示在结果中。我已经等了1天,但结果仍
- 具有1个文件夹名称的Google帐户:reports
- 谷歌账户A中对文件夹报告具有最高访问权限和修改权限的服务账户B
- 服务帐户密钥C由服务帐户B创建
public List<GoogleFileItem> getAllFile() {
try {
if (!serviceAccountKey.exists()) {
throw new Exception("key file don't exist");
}
Drive drive = createDrive();
List<GoogleFileItem> responseList = new ArrayList<>();
FileList result = drive.files().list()
.setQ("trashed=false")
.setFields("nextPageToken, files(id, name, kind, mimeType, parents, trashed)")
.execute();
List<File> files = result.getFiles();
int i =0 ;
for (File file : files) {
if (file.getTrashed()) i++;
GoogleFileItem item = new GoogleFileItem();
item.setId(file.getId());
item.setName(file.getName());
item.setThumbnailLink(file.getThumbnailLink());
item.setKind(file.getKind());
item.setMimeType(GoogleMimeType.find(file.getMimeType()));
if (file.getParents() != null) {
item.setParents(file.getParents());
} else {
item.setParents(Collections.singletonList(""));
}
responseList.add(item);
}
return responseList;
} catch (Exception e) {
e.printStackTrace();
logger.error("Exception: " + e);
return null;
}
}
public List getAllFile(){
试一试{
如果(!serviceAccountKey.exists()){
抛出新异常(“密钥文件不存在”);
}
Drive=createDrive();
List responseList=new ArrayList();
文件列表结果=drive.files().list()
.setQ(“垃圾=false”)
.setFields(“nextPageToken,文件(id、名称、种类、mimeType、父类、垃圾)”)
.execute();
List files=result.getFiles();
int i=0;
用于(文件:文件){
if(file.getTrashed())i++;
GoogleFileItem=新的GoogleFileItem();
item.setId(file.getId());
item.setName(file.getName());
item.setThumbnailLink(文件.getThumbnailLink());
item.setKind(file.getKind());
setMimeType(GoogleMimeType.find(file.getMimeType());
if(file.getParents()!=null){
item.setParents(文件.getParents());
}否则{
item.setParents(Collections.singletonList(“”));
}
响应列表。添加(项目);
}
返回应答器;
}捕获(例外e){
e、 printStackTrace();
记录器错误(“异常:+e);
返回null;
}
}
编辑:
- 我遗漏的一点是,我删除的文件是使用API使用服务帐户密钥C上传到Google drive的,所以这可能是问题的原因,但我不确定
服务帐户密钥C
)和您的常规帐户(谷歌帐户A
)之间共享该文件的。这是否在与我共享的下看到?还是在共享驱动器中?请注意,如果您删除了与您共享的文件,您只是将其从视图中删除,但它仍将显示在搜索结果中,如果您打开它,您可以在与我共享下再次看到它(参考)。可能这就是这里发生的情况?@lamblichus我的案例由服务帐户上载到用户驱动器上的共享文件夹中,并且我已再次检查共享文件夹,我的已删除文件不在那里。您是否尝试使用帐户a
UI上的搜索栏进行搜索?可能这是针对帐户a
删除的,但它仍然在服务帐户的驱动器中。您是否已检查是否可以使用帐户A
通过API检索该文件?(顺便说一句,我不确定我是否理解您所说的服务帐户密钥C是由服务帐户B创建的)。钥匙C是什么意思?@lamblichus是的,我相信是这样的。非常感谢。关于服务帐户密钥C,即服务帐户B创建的服务帐户密钥。