简体   繁体   English

在Google云端硬盘文件夹中创建文件

[英]Create File inside Google Drive Folder

I am trying to create a file inside a folder with the GoogleDriveApi. 我正在尝试使用GoogleDriveApi在文件夹内创建文件。 Directly after I created the folder, I can use the DriveFolder from the SuccessListener to create a File inside. 创建文件夹后,可以直接使用DriveFolder中的SuccessListener在其中创建文件。 But I don't know how to create a File inside later... Because dF.getDriveId().encodeToString() don't work, so I can't create the DriveFolder Object later again. 但是我以后不知道如何创建文件...因为dF.getDriveId().encodeToString()不起作用,所以我以后不能再创建DriveFolder对象。

CreateFolder: 创建文件夹:

Drive.getDriveResourceClient(getActivity(), gsa)
    .getRootFolder()
    .continueWithTask(new Continuation<DriveFolder, Task<DriveFolder>>() {
        @Override
        public Task<DriveFolder> then(@NonNull Task<DriveFolder> task) throws Exception {
            DriveFolder parentFolder = task.getResult();
            MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
                    .setTitle("Foo")
                    .setMimeType(DriveFolder.MIME_TYPE)
                    .setStarred(true)
                    .build();
            return Drive.getDriveResourceClient(getActivity(), gsa).createFolder(parentFolder, changeSet);
        }
    })
    .addOnSuccessListener(new OnSuccessListener<DriveFolder>() {
        @Override
        public void onSuccess(DriveFolder dF){
            //Here I get the DriverFolder Object.
            driveFolder = df;
        }
    });

CreateFile: 创建文件:

final Task<DriveFolder> rootFolderTask = Drive.getDriveResourceClient(getActivity(), gsa).getRootFolder();
final Task<DriveContents> createContentsTask = Drive.getDriveResourceClient(getActivity(), gsa).createContents();
Tasks.whenAll(rootFolderTask, createContentsTask)
    .continueWithTask(new Continuation<Void, Task<DriveFile>>() {
        @Override
        public Task<DriveFile> then(@NonNull Task<Void> task) throws Exception {

            DriveContents contents = createContentsTask.getResult();
            OutputStream outputStream = contents.getOutputStream();
            ByteArrayOutputStream bitmapStream = new ByteArrayOutputStream();
            BitmapFactory.decodeFile("path").compress(Bitmap.CompressFormat.PNG, 100, bitmapStream);
            try {
                outputStream.write(bitmapStream.toByteArray());
            } catch (IOException e1) {
                Log.i("ERROR", "Unable to write file contents.");
            }
            MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
                    .setTitle("Foo.png")
                    .setMimeType("image/png")
                    .setStarred(true)
                    .build();
            //use driveFolder from CreateFolder
            return Drive.getDriveResourceClient(getActivity(), gsa).createFile(driveFolder, changeSet, contents)
        }
    });

I solved the problem with opening a FilePicker with Drive.getDriveClient(this, gsa).newOpenFileActivityIntentSender and let the user pick the folder. 我用Drive.getDriveClient(this, gsa).newOpenFileActivityIntentSender打开FilePicker解决了问题,并让用户选择了该文件夹。 In the onActivityResult I get the DriveId with data.getExtras().get("response_drive_id") . onActivityResult我使用data.getExtras().get("response_drive_id") With Drive.getDriveClient(this, gsa).getDriveId(driveId.getResourceId) I can recreate the DriveID object and upload a file to it. 使用Drive.getDriveClient(this, gsa).getDriveId(driveId.getResourceId)我可以重新创建DriveID对象并将文件上传到该对象。 That's it. 而已。

But nevertheless I want to know how to get driveFolder.getDriveId().getResourceId() in onSuccess after I created the folder. 但是,尽管如此,我想知道在创建文件夹后如何在onSuccess获取driveFolder.getDriveId().getResourceId()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM