【问题标题】:Create File inside Google Drive Folder在 Google Drive 文件夹中创建文件
【发布时间】:2018-10-09 14:21:48
【问题描述】:

我正在尝试使用 GoogleDriveApi 在文件夹中创建一个文件。在我创建文件夹后,我可以直接使用SuccessListener 中的DriveFolder 在里面创建一个文件。但是我不知道以后怎么在里面创建一个File...因为dF.getDriveId().encodeToString()不起作用,所以我以后不能再创建DriveFolder Object了。

创建文件夹:

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;
        }
    });

创建文件:

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)
        }
    });

【问题讨论】:

  • 你检查过这个SO post吗?
  • 否,但 DriveFolder.createFile 已弃用。而且我无法重新创建 DriveFolder 对象,这就是问题所在。

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


【解决方案1】:

我解决了使用Drive.getDriveClient(this, gsa).newOpenFileActivityIntentSender 打开 FilePicker 并让用户选择文件夹的问题。在onActivityResult 中,我得到带有data.getExtras().get("response_drive_id") 的DriveId。使用Drive.getDriveClient(this, gsa).getDriveId(driveId.getResourceId),我可以重新创建 DriveID 对象并将文件上传到其中。而已。

但是我想知道在创建文件夹后如何在onSuccess 中获取driveFolder.getDriveId().getResourceId()。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多