You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Drive API:如何为共享文件添加指定用户权限

解决方法:给Google Drive上传文件添加特定用户权限

你的代码已经实现了公开可读权限,要添加特定用户权限,只需要在创建完公开权限后,再创建针对目标用户的Permission对象并调用API添加即可。

关键修改点:

  • 针对特定用户,需将Permission的type设为"user",并指定用户的emailAddress
  • 可以批量添加多个用户,循环调用权限创建接口即可

修改后的完整代码:

public Task<String> uploadFileToGoogleDrive(String path) {

    if (folderId.isEmpty()) {
        Log.e(TAG, "uploadFileToGoogleDrive: folder id not present");
        isFolderPresent().addOnSuccessListener(id -> folderId = id)
                .addOnFailureListener(exception -> Log.e(TAG, "Couldn't create file.", exception));
    }

    return Tasks.call(mExecutor, () -> {

        java.io.File filePath = new java.io.File(path);

        File fileMetadata = new File();
        fileMetadata.setName(filePath.getName());
        fileMetadata.setParents(Collections.singletonList(folderId));
        fileMetadata.setMimeType(Utils.getFileMimeType(filePath));

        FileContent mediaContent = new FileContent(Utils.getFileMimeType(filePath), filePath);
        File file = mDriveService.files().create(fileMetadata, mediaContent)
                .setFields("id")
                .setIncludePermissionsForView("published")
                .execute();
        Log.i(TAG, "uploadFileToGoogleDrive: " + " File ID: " + file.getId());

        // 1. 设置公开可读权限(保留原有逻辑)
        Permission publicPermission = new Permission();
        publicPermission.setType("anyone");
        publicPermission.setRole("reader");
        mDriveService.permissions().create(file.getId(), publicPermission).execute();

        // 2. 添加单个特定用户权限(替换为目标用户邮箱)
        String targetUserEmail = "example@domain.com";
        Permission userPermission = new Permission();
        userPermission.setType("user");
        userPermission.setRole("reader"); // 可按需改为"writer"或"owner"
        userPermission.setEmailAddress(targetUserEmail);
        mDriveService.permissions().create(file.getId(), userPermission).execute();

        // 3. 批量添加多个用户的示例
        List<String> targetUserEmails = Arrays.asList("user1@domain.com", "user2@domain.com");
        for (String email : targetUserEmails) {
            Permission batchPermission = new Permission();
            batchPermission.setType("user");
            batchPermission.setRole("reader");
            batchPermission.setEmailAddress(email);
            mDriveService.permissions().create(file.getId(), batchPermission).execute();
        }

        return file.getId();
    });
}

注意事项:

  • 确保API授权范围包含https://www.googleapis.com/auth/drive,若仅操作自身上传的文件,drive.file + drive.permissions组合也可
  • 若要添加谷歌群组权限,将type设为"group"并传入群组邮箱即可
  • 遇到权限错误时,检查OAuth2令牌的权限范围是否正确,以及目标用户邮箱是否有效

内容的提问来源于stack exchange,提问作者mekanix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 07:50:48