0

アプリケーション所有アカウントを使用してファイルを作成しています。ただし、ファイルの所有権を他のユーザーに譲渡したいと考えています。以下のコードは機能しますが、アクセス許可の設定は無視されるため、私はファイルの所有者ではありません。ファイルの所有権はアプリケーション所有アカウントのままであるため、ファイルを完全に削除することはできません。

public File uploadEmptyFile(String title, String subFolderName, String mimetype) throws GDriveAccessException {
    File fileMetadata = new File();
    fileMetadata.setTitle(title);
    fileMetadata.setMimeType(mimetype);
    Permission newPermission = new Permission();

    newPermission.setValue("xxx@xyz.com");
    newPermission.setType("user");
    newPermission.setRole("owner");

    fileMetadata.setUserPermission(newPermission);
    if (subFolderName==null){
        fileMetadata.setParents(Arrays.asList(new ParentReference().setId(FOLDER_ID)));
    }else{
        fileMetadata.setParents(Arrays.asList(new  ParentReference().setId(getFileIdByFolderNName(null,subFolderName))));
    }


    File faux=null;
    try {
        faux= getDrive().files().insert(fileMetadata).execute();
        return faux;
    } catch (IOException e1) {
    throw new GDriveAccessException(e1);
    }

  }

アクセス許可の設定が無視される理由を特定するための助けを歓迎します。

4

2 に答える 2

0

まず、通常の Google Apps アカウントでは所有権を変更できないという問題があることがわかりました。ファイルの所有権を譲渡するには、プレミアム ライセンスが必要です。

第二に、私が実際に必要としていたのはなりすましであることがわかりました。

public static Drive getDrive() throws GDriveAccessException {
    if(drive == null) {
        HttpTransport httpTransport = new UrlFetchTransport();
        JacksonFactory jsonFactory = new JacksonFactory();
        GoogleCredential credential;
            credential = new GoogleCredential.Builder()
                  .setTransport(httpTransport)
                  .setJsonFactory(jsonFactory)
                  .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
                  .setServiceAccountPrivateKey(getPrivateKey())
                  .setServiceAccountScopes(DriveScopes.DRIVE)
                  .setServiceAccountUser("xxx@xyz.com")// Use this property for impersonation
                  .build();
      Drive service = new Drive.Builder(httpTransport, jsonFactory, null)
          .setHttpRequestInitializer(credential).build();
      drive=service;
      return service;
    }
    return drive;
}

この機能に関するより良いドキュメントがあるとよいのですが、Google.

于 2012-12-19T14:51:39.100 に答える
0

共有とパーミッションのドキュメントで概説されているように、permissions.insertを使用する必要があります。

于 2012-12-18T23:42:47.190 に答える