Google Drive:文件大小为空

问题描述 投票:0回答:4

当我尝试通过 Google Drive 上的 getFileSize() 获取文件大小时,结果为 null。我知道,当文件未存储在 Drive 上但文件存储在 Drive 上时,结果可能为 null(downloadUrl 与 null 不同)。

    Drive lService = new Builder(new NetHttpTransport(), new JacksonFactory(), lCredential).setApplicationName("TODO").build();
    FileList files = lService.files().list().execute();

    List<FileDTO> lResult = new ArrayList<FileDTO>();
    for (File lFile : files.getItems()) {
        DriveFileDTO lFileDTO = new DriveFileDTO();
        lFileDTO.setName(lFile.getTitle());
        lFileDTO.setMimeType(lFile.getMimeType());
        lFileDTO.setSize(lFile.getFileSize()); // <-- FileSize = NULL

        lFileDTO.setUrl(lFile.getDownloadUrl());

        lResult.add(lFileDTO);
    }

你能帮我吗?

谢谢! 开始!

google-drive-api
4个回答
1
投票

Google 云端硬盘对文件列表的默认请求将包括文件大小,但仅限于文件大小不隐式为空的文件。例如,文件夹和 Google 电子表格(只是链接)将为空。

这可以通过 Drive API exlporer 进行验证。只需在字段编辑器中请求文件大小和 mimtype 即可。即使请求了文件大小,键值对也不会包含在所提到的文件类型的响应中——但会返回其他类型的键值对。


0
投票

请尝试使用 OAuth 2.0 Playground 重现问题:

https://developers.google.com/oauthplayground

通过使用 OAuth Playground,我们可以发送原始请求并检查 API 中是否存在问题。 我尝试自己复制它并且工作正常。


0
投票

我还面临着从 Google Drive API 获取文件大小的问题。 但后来我找到了解决方案。 在请求中添加“.setFields("nextPageToken, files(id, name,createdTime,modifiedTime,size,kind)")”字段。 您需要在此处列出您要访问的字段。

    FileList result = mDrive
            .files()
            .list()
            .setQ("parents = 'MY_FODER'")
            .setSpaces("drive")
            .setFields("nextPageToken, files(id, name, createdTime, modifiedTime, size, kind)")
            .execute();

此外,在创建云端硬盘时,添加范围“https://www.googleapis.com/auth/drive.metadata.readonly”

    GoogleAccountCredential credential =
            GoogleAccountCredential.usingOAuth2(
                    mContext,
                    Arrays.asList(
                            "https://www.googleapis.com/auth/drive.readonly",
                            "https://www.googleapis.com/auth/drive.metadata.readonly",
                            Scopes.EMAIL));
    credential.setSelectedAccount(mAccount.getAccount());

    mDrive = new Drive.Builder(
                    AndroidHttp.newCompatibleTransport(),
                    new GsonFactory(),
                    credential)
                    .setApplicationName("Android-client")
                    .build();

-1
投票

在 HttpResponse 类上调用

getHeaders().GetContentLength()
(代码假设
myurl
是您的 url):

HttpResponse resp = service.getRequestFactory().buildGetRequest(new GenericUrl(myurl)).execute();
Log.v("abc","file size is : " + resp.getHeaders().getContentLength());
© www.soinside.com 2019 - 2024. All rights reserved.