【发布时间】:2021-10-15 13:54:09
【问题描述】:
我正在使用 Drive API 构建 Spring Boot api,通过授予对共享驱动器下创建的文件夹的访问权限来向用户分配权限(通过电子邮件 ID)
我收到错误"message" : "File not found: i6fBhgd*********",
详情如下:
控制器:
package com.test.drive.controller;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import com.test.drive.business.DriveBoException;
import com.test.drive.business.FolderBo;
import com.test.drive.util.DriveIntegrationUtil;
import com.test.drive.vo.DriveFolderVo;
@RestController
public class FolderController {
private static final String CLASS_NAME = FolderController.class.getName();
private static final Logger LOGGER = Logger.getLogger(CLASS_NAME);
@Autowired
private FolderBo folderBo;
// Folder Permission
@PostMapping("/folderpermission")
public DriveFolderVo folderPermission(@RequestBody DriveFolderVo driverFolderVo) {
try {
folderBo.folderPermission(driverFolderVo.getFolderId(), driverFolderVo.getEmailId());
} catch (DriveBoException e) {
LOGGER.logp(Level.SEVERE, CLASS_NAME, "folderPermission", e.getMessage(), e);
throw new RuntimeException();
}
return driverFolderVo;
}
}
类:
package com.test.drive.business;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.springframework.stereotype.Service;
import com.google.api.services.drive.Drive;
import com.google.api.services.drive.Drive.Files;
import com.google.api.services.drive.model.File;
import com.google.api.services.drive.model.FileList;
import com.google.api.services.drive.model.Permission;
import com.test.drive.util.DriveIntegrationUtil;
import com.test.drive.vo.DriveFolderVo;
@Service
public class FolderBo {
private static final String CLASS_NAME = FolderBo.class.getName();
private static final Logger LOGGER = Logger.getLogger(CLASS_NAME);
// Folder Permission
public void folderPermission(String folderId, String emailId) throws DriveBoException {
try {
Drive drive = DriveIntegrationUtil.getDrive();
// List<File> result = new ArrayList<File>();
Files.List request = drive.files().list().setFields("nextPageToken, files(id, name, createdTime)").setQ("mimeType = 'application/vnd.google-apps.folder' and trashed = false");
Permission permission = new Permission();
permission.setEmailAddress(emailId);
permission.setType("user");
permission.setRole("reader");
drive.permissions().create(folderId, permission).setTransferOwnership(false).execute();
request.setIncludeTeamDriveItems(true);
request.setSupportsTeamDrives(true);
} catch (Exception e) {
LOGGER.logp(Level.SEVERE, CLASS_NAME, "folderPermission", e.getMessage(), e);
throw new DriveBoException(e);
}
}
}
错误:
com.google.api.client.googleapis.json.GoogleJsonResponseException: 404 Not Found
{
"code" : 404,
"errors" : [ {
"domain" : "global",
"location" : "fileId",
"locationType" : "parameter",
"message" : "File not found: i6fBhgd*********",
"reason" : "notFound"
} ],
"message" : "File not found: i6fBhgd*********"
}
【问题讨论】:
-
so ...你有这样的文件吗,它存储在正确的地方吗?
-
是的,我有这个文件,它存储在正确的位置
-
当我在下面的 URL 中尝试时,它工作正常。在我提供的请求参数中(fileID= i6fBhgd*********,supportsAllDrives=true,supportsTeamDrives=true)。在请求正文中,我提供了 { "role": "reader", "type": "user", "emailAddress": "test@email.com" } developers.google.com/drive/api/v3/reference/permissions/create
标签: java spring-boot google-drive-api