将文件上传到Google云端硬盘?

时间:2018-05-24 16:11:00

标签: java android google-drive-android-api

我按照此文档将文件上传到Google云端硬盘:https://developers.google.com/drive/android/files
现在,每当我想上传文件时,都会出现一个弹出的Google云端硬盘,询问我上传它的位置以及使用哪个名称。我不想要那个弹出窗口,我想直接上传文件 有什么方法可以做到吗?我无法在文档中找到任何内容。 我也发现了https://developers.google.com/drive/api/v3/integrate-create,但我不知道我是否可以使用它。你能给我一些提示吗?

编辑:
这是我的build.gradle:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {

    repositories {
        google()
        jcenter()
        mavenCentral()
        maven { url 'https://maven.google.com' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.2'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        mavenCentral()
        maven { url 'https://maven.google.com' }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

1 个答案:

答案 0 :(得分:3)

可以使用适用于Android的Google Drive REST API(它直接使用Google Drive API),而不是使用适用于Android的Google Drive SDK。

首先,您需要通过选择设备的Google帐户登录Google云端硬盘。我猜您已经完成了,因为在Google Drive SDK中也需要登录。登录我使用这种依赖。

compile 'com.google.android.gms:play-services-auth:10.2.0'

然后,要上传文件(通过在REST API中创建它),请执行以下操作。

首先,导入Android的Google Drive REST API依赖项:

compile('com.google.api-client:google-api-client-android:1.22.0') {
    exclude group: 'org.apache.httpcomponents'
}
compile('com.google.apis:google-api-services-drive:v3-rev75-1.22.0') {
    exclude group: 'org.apache.httpcomponents'
}

其次,创建服务对象以便与API连接:

private Drive createService(Context context) {
   GoogleAccountCredential mCredential = GoogleAccountCredential.usingOAuth2(context.getApplicationContext(), Arrays.asList(new String[]{DriveScopes.DRIVE})).setBackOff(new ExponentialBackOff());
   mCredential.setSelectedAccountName("your_logged_account_name");

   HttpTransport transport = AndroidHttp.newCompatibleTransport();
   JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
   mService = new com.google.api.services.drive.Drive.Builder(
        transport, jsonFactory, mCredential)
        .setApplicationName(context.getString(R.string.app_name))
        .build();

  return mService;
}

之后,当您登录并拥有Drive实例(服务)时,您可以创建一个文件:

public void uploadFile(java.io.File fileContent) {
   try {
     com.google.api.services.drive.model.File file = new com.google.api.services.drive.model.File();
     file.setName("filen_ame");

     List<String> parents = new ArrayList<>(1);
     parents.add("parent_folder_id"); // Here you need to get the parent folder id
     file.setParents(parents);

     FileContent mediaContent = new FileContent("your_file_mime_type", fileContent);
     mService.files().create(file, mediaContent).setFields("id").execute();
     Log.d(TAG, "File uploaded");
   } catch (IOException e) {
     Log.e(TAG, "Error uploading file: ", e);
     e.printStackTrace();
   }
}

请注意我使用完整的类名来区分Java文件和驱动器文件。

另请注意,此调用是同步的,因此您必须在非UiThread中调用它。

此方法可以创建文件并将其上传到Google云端硬盘,而无需显示任何选择对话框,也无需用户互动。

这里有一些documentation

希望这有帮助。