繁体   English   中英

在 Android Studio 中使用 Google Drive API 从驱动器下载文件以上传到另一个驱动器

[英]Download file from drive to upload into another drive using Google Drive API in Android Studio

所以,在我的应用程序中,我需要从用户的驱动器中获取一个文件并将其上传到我的。

我已经搜索过,似乎唯一的方法是从用户的驱动器下载文件,然后将其上传到我的。

我已经解决了所有 OAuth2 问题,并且能够创建、获取和列出文件。

但我的问题是,根据谷歌的文档,我应该将文件下载到声明为 OutputStream 的 ByteArrayOutputStream,但是当我上传文件时,我应该上传 java.io 文件

有谁知道我如何从下载方法中获取输出流并将其转换为文件以发送到上传方法?

到目前为止,这是我的代码:

下载文件的代码(我从谷歌得到的)

 public Task<java.io.File> downloadFile(PostFileHolder postFileHolder) {
        return Tasks.call(mExecutor, () -> {
            // Retrieve the metadata as a File object.

            Log.i("download file", "chegou");

            OutputStream outputStream = new ByteArrayOutputStream();
            mDriveService.files().export(postFileHolder.getGoogleId(), "application/pdf")
                    .executeMediaAndDownloadTo(outputStream);
          // I need to use the export method because I will have some docs and slides files

            return null;
        });
    }

这是上传文件的代码:

public Task<File> uploadFileWithMetadata(java.io.File javaFile, String mimeType, boolean isSlide,  @Nullable final String folderId) {
        return Tasks.call(mExecutor, () -> {

            Log.i("upload file", "chegou" );

            String convertTo;
            if(isSlide){
                convertTo = TYPE_GOOGLE_SLIDES;
            }
            else{
                convertTo = TYPE_GOOGLE_DOCS;
            }

            List<String> folder;
            if (folderId == null) {
                folder = Collections.singletonList("root");
            } else {

                folder = Collections.singletonList(folderId);
            }
            File metadata = new File()
            .setParents(folder)
            .setName(javaFile.getName())
            .setMimeType(convertTo);

            FileContent mediaContent = new FileContent(convertTo, javaFile);

            File uploadedFile = mDriveService.files().create(metadata, mediaContent)
                    .setFields("id,name,size,createdTime,modifiedTime,starred,thumbnailLink,mimeType")
                    .execute();

            Log.i("File ID: " , uploadedFile.getId());

            return uploadedFile;
        });
    }

谢谢!

您可以简单地使用以下最少的代码来创建文件。 稍后使用此文件上传。

val outputStream = ByteArrayOutputStream() // Your 
val byteData = bos.toByteArray()


val mainFile = File("Path with filename")
//write the bytes in file
val fos = FileOutputStream(mainFile)
fos.write(bitmapdata)
fos.flush()
fos.close()

由于您的 outputStream 已初始化为 ByteArrayOutputStream,因此您可以简单地使用强制转换方法,例如((ByteArrayOutputStream) outputStream).toByteArray()

关于路径,您可以将文件保存在内部文件目录或外部存储中的任何位置作为临时文件。 我会通过数据和文件存储概述教程向您推荐 go 以获取更多信息。

暂无
暂无

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

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