簡體   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