将文件上传到Google云端硬盘中的特定文件夹

时间:2019-11-16 13:08:18

标签: java android google-drive-api

我有两种方法,一种用于创建文件并将其上传到根文件夹到Google驱动器,另一种仅用于创建到Google驱动器的文件夹。

是否有可能以某种方式将这两者连接并将文件上传到该新创建的文件夹?

我已经阅读过Google文档,但无法弄清楚该文件可以转到哪个文件夹的位置

要创建文件:

    private Task<Void> createFileIntentSender(DriveContents driveContents, File file) throws FileNotFoundException {
        Log.i(TAG, "New contents created.");

        // Get an output stream for the contents.
        OutputStream outputStream = driveContents.getOutputStream();

        byte[] bytesArray = new byte[(int) file.length()];

        FileInputStream fis = null;
        try {
            fis = new FileInputStream(file);
            fis.read(bytesArray); //read file into bytes[]
            fis.close();
            outputStream.write(bytesArray);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
                .setTitle(windowName.getText().toString())
                .setMimeType("application/vnd.ms-excel")
                .setStarred(true)
                .build();

        // Set up options to configure and display the create file activity.
        CreateFileActivityOptions createFileActivityOptions =
                new CreateFileActivityOptions.Builder()
                        .setInitialMetadata(changeSet)
                        .setInitialDriveContents(driveContents)
                        .build();

        return mDriveClient
                .newCreateFileActivityIntentSender(createFileActivityOptions)
                .continueWith(
                        new Continuation<IntentSender, Void>() {
                            @Override
                            public Void then(@NonNull Task<IntentSender> task) throws Exception {
                                startIntentSenderForResult(task.getResult(), REQUEST_CODE_CREATOR, null, 0, 0, 0);
                                return null;
                            }
                        });
    }

要创建文件夹:

    private void createFolder() {
        mDriveResourceClient.getRootFolder()
                .continueWithTask(task -> {
                    DriveFolder parentFolder = task.getResult();
                    MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
                            .setTitle("Folder1")
                            .setMimeType(DriveFolder.MIME_TYPE)
                            .setStarred(true)
                            .build();
                    return mDriveResourceClient.createFolder(parentFolder, changeSet);
                })
                .addOnFailureListener(this, e -> {
                    Log.e(TAG, "Unable to create file", e);
                    finish();
                });
    }

1 个答案:

答案 0 :(得分:1)

无需先将文件上传到root文件夹。您可以将文件直接上传到所需的文件夹。

首先,您需要create the folder上载文件。此方法返回File resourcefilesfolders在云端硬盘中是basically the same,主要区别在于folders仅包含元数据并且具有MIME类型{{1 }}。

第二,您必须upload your file directly to the created folder。为此,在进行调用时,您必须在文件的application/vnd.google-apps.folder属性中指定folder ID(可以从上一步的响应中获取)(选中此项以查看{{3 }},您可以在文件中指定。

我希望这对您有帮助。