【发布时间】:2021-04-24 05:09:10
【问题描述】:
因此,在我的应用程序中,我需要从用户的驱动器中获取一个文件并将其上传到我的应用程序中。
我已经搜索过,似乎唯一的方法是从用户的驱动器下载文件,然后将其上传到我的。
我已经解决了所有 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;
});
}
谢谢!
【问题讨论】:
标签: android android-studio google-drive-api google-drive-android-api