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

妮娜

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

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

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

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

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

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

下载文件的代码(我从Google获得)

 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,因此您可以简单地使用cast方法,例如 ((ByteArrayOutputStream) outputStream).toByteArray()

关于路径,您可以将文件保存在内部文件目录或外部存储中的任何位置作为临时文件。我建议您仔细阅读“数据和文件存储概述”以及教程以获取更多信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python:使用网址从Google驱动器下载文件

使用wget从Google驱动器下载文件

Google Drive API-Android-如何获取驱动器文件ID?

python:如何使用api从Google驱动器下载文件

在Google驱动器上创建一个文件夹(如果不存在),然后使用Python脚本将文件上传到该文件夹

使用没有Google API的C#从Google驱动器下载文件

如何使用gapi和可恢复的上传将文件上传到Google驱动器?

Google Team Drive使用Apps脚本在团队驱动器文件夹之间移动文件

如何使用v3 rest api从Google驱动器下载文件?

使用Xamarin.Android将文件上传到Google驱动器文件夹

Google Drive API v3 .NET:如何让用户直接从Google驱动器而不是从服务器下载文件?

如何使用使用Python的驱动器API将文件上传到Google驱动器?

如何修复Android中的“在Google驱动器上下载文件存储”错误

如何使用python上传到Google驱动器

使用curl命令通过drive-rest-api将文件上传到Google驱动器中特定文件夹的直接方法

如何使用Google Drive API v3上传到Python中的共享驱动器?

如何使用带有react-native-drive-api-wrapper的react native将图像上传到Google驱动器?

使用Google Apps脚本将文件从Google驱动器上传到外部API

在google-api-services-drive中使用共享驱动器的fileId时,为什么“找不到文件”?

Sharepoint:使用图形API在特定驱动器中创建一个新文件

使用Google脚本将自定义CSV文件替换为Google驱动器中的另一个CSV文件

使用python,我无法从Google Drive API v3访问共享驱动器文件夹

使用ubuntu中的终端将我的/ var / www数据移动到另一个驱动器

如何使用<img>标记中的src属性从另一个驱动器检索和显示图像?

Google Drive Android API-从驱动器下载数据库文件

如何使用一个驱动器API在“一个驱动器”业务的根源中获取项目?

是否可以使用另一个物理驱动器中的未分配空间来扩展 C 驱动器?

如何使用 Google Drive API V3 将文件上传到 Group Drive(共享驱动器)?

使用 Google Drive api 在共享驱动器中创建外部快捷方式