在没有OAuth的情况下将文件上传到google驱动器

时间:2014-10-01 17:06:32

标签: java google-drive-api

我想在google drive中将文件上传到我的帐户。这个过程应该没有人为干预。有没有办法使用谷歌驱动器API提供我的用户和密码上传我的谷歌驱动器中的文件?

到目前为止我做了什么:

  • 我在https://console.developers.google.com创建了一个项目并启用了google drive api
  • https://console.developers.google.com - > API&验证 - >凭据我创建了一个新的客户端ID,在我选择的服务帐户的应用程序类型中,我下载了pkcs12密钥。
  • 我有下一个代码:

    /**
     * Email of the Service Account
     */
    private static final String SERVICE_ACCOUNT_EMAIL = "account_of_service_account@developer.gserviceaccount.com";
    
    /**
     * Path to the Service Account's Private Key file
     */
    private static final String SERVICE_ACCOUNT_PKCS12_FILE_PATH = "/path/to/pkcs12/donloaded.pkcs12";
    
    /**
     * Build and returns a Drive service object authorized with the service
     * accounts.
     *
     * @return Drive service object that is ready to make requests.
     */
    public static Drive getDriveService() throws GeneralSecurityException, IOException, URISyntaxException {
        HttpTransport httpTransport = new NetHttpTransport();
        JacksonFactory jsonFactory = new JacksonFactory();
        List<String> scopes = new ArrayList<String>();
        scopes.add(DriveScopes.DRIVE);
        GoogleCredential credential;
        credential = new GoogleCredential.Builder()
                .setTransport(httpTransport)
                .setJsonFactory(jsonFactory)
                .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
                .setServiceAccountScopes(scopes)
                .setServiceAccountPrivateKeyFromP12File(new java.io.File(SERVICE_ACCOUNT_PKCS12_FILE_PATH))
                .build();
        Drive service = new Drive.Builder(httpTransport, jsonFactory, null)
                .setHttpRequestInitializer(credential).build();
        return service;
    }
    
    public static void main(String[] args) throws GeneralSecurityException, IOException, URISyntaxException {
    
        Drive client = getDriveService();
    
        File body = new File();
        body.setTitle("mytitle");
        body.setMimeType("application/vnd.google-apps.spreadsheet");
    
        File file = client.files().insert(body).execute();
    
        System.out.println(file.getId());
        System.out.println(file.getAlternateLink());
    }
    

当我运行代码时结果没问题,我得到文件的ID和备用链接,但文件没有加载到我的帐户。我将备用链接粘贴到浏览器中,但我没有权限。

您刚刚上传的文件在哪里?我应该更改什么来表明我的帐户驱动器?我应该在哪里添加用户名和密码才能与我的驱动器关联?我应该怎样对文件公开?

非常感谢你的关注。我希望他们可以帮助我。

2 个答案:

答案 0 :(得分:1)

您还需要在项目上设置父级,例如“root”,以便它们在“我的云端硬盘”空间中显示为某人。 “root”作为父级是UI中的“我的驱动器”。

在云端硬盘用户界面中使用搜索进行确认,您会发现它们已上传,但目前处于“未授权”状态,因为您的代码未添加父级。

答案 1 :(得分:1)

您正在将该文件上传到您的服务帐户。 如果您需要访问该文件,则必须与您的电子邮件共享该文件。 使用以下方法与您的电子邮件共享文件。

 public static void shareFileOrFolder(Drive service, File file)
        throws IOException {
    Permission newPermission = new Permission();

    newPermission.setEmailAddress("xxxxx@gmail.com");
    newPermission.setValue("xxxxx@gmail.com");
    newPermission.setType("user");
    newPermission.setRole("writer");
    service.permissions().insert(file.getId(), newPermission).execute();
}