Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 谷歌驱动API查询时,为什么删除的文件仍显示在结果中_Java_Spring Boot_Google Drive Api_Google Api Java Client_Google Account - Fatal编程技术网

Java 谷歌驱动API查询时,为什么删除的文件仍显示在结果中

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天,但结果仍

我正在做一个服务自动生成文件,并上传到谷歌驱动器使用SpringBoot和Java8。这是另一个更大服务的外部服务

我正在使用的谷歌环境:

  • 具有1个文件夹名称的Google帐户:reports
  • 谷歌账户A中对文件夹报告具有最高访问权限和修改权限的服务账户B
  • 服务帐户密钥C由服务帐户B创建
在文件夹报告中有一些文件和文件夹,我通常是通过用户界面使用google帐户A删除的(删除然后清空垃圾)。当我使用服务帐户密钥C进行查询时,那些我被删除的文件和文件夹仍然显示在结果中。我已经等了1天,但结果仍然包含删除的文件

有人能为我解释一下Google Drive API的这种行为吗

代码如下:

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的,所以这可能是问题的原因,但我不确定
答案: 如果共享文件夹中的文件由协作者(而不是所有者)删除,则仅为该协作者删除该文件,而不为其他协作者删除该文件。根据文档,只有所有者有权访问该文件,但其他合作者(尚未主动删除该文件)似乎也有权访问:

当有人从共享文件夹中删除文件时,只有所有者才能访问该文件

因此,当协作者(而非所有者)尝试从UI中的共享文件夹中删除文件时,将显示以下消息:

“{YOUR_FILE_NAME}”将从视图中删除。合作者仍然可以访问

因为文件是由服务帐户上载的,所以此帐户是文件所有者。即使协作者(您的常规帐户)将其删除,服务帐户(作为所有者)仍然可以访问它

参考:

您是如何在上传者(
服务帐户密钥C
)和您的常规帐户(
谷歌帐户A
)之间共享该文件的。这是否在与我共享的
下看到?还是在共享驱动器中?请注意,如果您删除了与您共享的文件,您只是将其从视图中删除,但它仍将显示在搜索结果中,如果您打开它,您可以在
与我共享下再次看到它(参考)。可能这就是这里发生的情况?@lamblichus我的案例由服务帐户上载到用户驱动器上的共享文件夹中,并且我已再次检查共享文件夹,我的已删除文件不在那里。您是否尝试使用
帐户a
UI上的搜索栏进行搜索?可能这是针对
帐户a
删除的,但它仍然在服务帐户的驱动器中。您是否已检查是否可以使用
帐户A
通过API检索该文件?(顺便说一句,我不确定我是否理解您所说的
服务帐户密钥C是由服务帐户B创建的
)。钥匙C是什么意思?@lamblichus是的,我相信是这样的。非常感谢。关于服务帐户密钥C,即服务帐户B创建的服务帐户密钥。