文件未找到错误Google Drive API: Springboot



我正在使用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*********"
}

如果您检查驱动器API错误页面:

当用户没有对文件的读访问权限或者该文件不存在时,会发生notFound错误。

修复此错误:

  1. 通知用户他们没有对文件的读访问权限或者该文件不存在。
  2. 指示用户向所有者请求文件权限。

因此,既然你提到这个文件确实存在,看起来你遇到的实际上是一个与文件权限相关的错误。

就像上面提到的,如果你想改变一个文件的权限,首先你必须对文件本身有读访问权限。

如果共享驱动器中的文件只有一个所有者,那么您可能会从创建一个服务帐户中受益,该帐户最终会冒充该所有者。通过这种方式,服务帐户充当这些文件的所有者,并且创建权限可能更容易和更安全,因为不需要向文件添加其他权限。

参考

  • 驱动API解析错误;

  • OAuth 2.0 for Server to Server application .

才能调用权限。创建当前通过身份验证的用户需要对文件本身具有权限。

文件未找到:i6fBhgd*********

向我暗示当前用户没有访问文件i6fBhgd*********的权限,没有访问权限,他们不能授予权限

做一个文件。Get确保用户首先具有访问权限。

该怎么做。

您现在遇到的问题是运行该文件的人即已授权的人没有访问权限。您需要文件的所有者来运行应用程序,然后授权该文件的人可以更改该文件的权限。

你需要在修改私有数据之前访问它。

最新更新