Java 谷歌硬盘在v3中可恢复上传
我正在寻找一些帮助/示例,以使用Java中新的v3 REST API执行可恢复上传到Google Drive 我知道这里有一个低级描述:。但目前,如果没有其他更简单的方法(比如以前的MediaHttpUploader,现在不推荐使用),我不愿意理解这些低级请求中的任何一个 我现在做的是:Java 谷歌硬盘在v3中可恢复上传,java,android,google-drive-api,Java,Android,Google Drive Api,我正在寻找一些帮助/示例,以使用Java中新的v3 REST API执行可恢复上传到Google Drive 我知道这里有一个低级描述:。但目前,如果没有其他更简单的方法(比如以前的MediaHttpUploader,现在不推荐使用),我不愿意理解这些低级请求中的任何一个 我现在做的是: File fileMetadata = new File(); fileMetadata.setName(name); fileMetadata.setDescription(...);
File fileMetadata = new File();
fileMetadata.setName(name);
fileMetadata.setDescription(...);
fileMetadata.setParents(parents);
fileMetadata.setProperties(...);
FileContent mediaContent = new FileContent(..., file);
drive.files().create(fileMetadata, mediaContent).execute();
但是对于大文件,如果连接中断,这是不好的。我最近刚刚创建了一个实现。它将在DriveFolder上创建一个新文件,并在任务成功时返回其元数据。在上传时,它还将用上传信息更新侦听器。我添加了注释以使其自动解释:
public Task<File> createFile(java.io.File yourfile, MediaHttpUploaderProgressListener uploadListener) {
return Tasks.call(mExecutor, () -> {
//Generates an input stream with your file content to be uploaded
FileContent mediaContent = new FileContent("yourFileMimeType", yourfile);
//Creates an empty Drive file
File metadata = new File()
.setParents(parents)
.setMimeType(yourFileMimeType)
.setName(yourFileName);
//Builds up the upload request
Drive.Files.Create uploadFile = mDriveService.files().create(metadata, mediaContent);
//This will handle the resumable upload
MediaHttpUploader uploader = uploadBackup.getMediaHttpUploader();
//choose your chunk size and it will automatically divide parts
uploader.setChunkSize(MediaHttpUploader.MINIMUM_CHUNK_SIZE);
//according to Google, this enables gzip in future (optional)
uploader.setDisableGZipContent(false); versions
//important, this enables resumable upload
uploader.setDirectUploadEnabled(false);
//listener to be updated
uploader.setProgressListener(uploadListener);
return uploadFile.execute();
});
}
要计算进度百分比,只需执行以下操作:
double percentage = uploader.getNumBytesUploaded() / totalFileSize
或者使用这个:
uploader.getProgress()
它提供已上载字节的百分比,表示为0.0(0%)到1.0(100%)之间。但请确保指定了内容长度,否则它将抛出
IllegalArgumentException
如果您使用的是简单的上传,可以很好地执行。如果您有稳定的连接和较小的文件大小,我会将请求更改为html类型,并使用api页面上有示例的可恢复上传选项。谢谢您的回答。正如这里所述,MediaHTTPUploader是不推荐的:(@Viatorus@SuppressWarnings(“deprecation”)
并不意味着MediaHTTPUploader是不推荐的。它可以用于在该类中使用的任何不推荐的方法或类中抑制不推荐,因为根本没有@deprecation
注释。=)谢谢,一整天之后,我找到了它,并与Api 29一起使用:new MediaHttpUploaderProgressListener(){Override public void progressChanged(MediaHttpUploader uploader)抛出IOException{final String sizeTemp=“Uploading”+:“+Formatter.formatShortFileSize(mContext,uploader.getNumBytesUploaded());RunnuiThread(new Runnable()){@Override public void run(){mProgress.setMessage(sizeTemp);});@NoorHossain很高兴我的答案帮助了你!关于答案中的代码,我们不需要使用new
,因为活动
已经从MediaHttpUploaderProgressListener
扩展,所以你只需要实现它的progressChanged
方法。另外,对于RunNuithread
,我使用了lambda
notation(Java8)使其更干净。
uploader.getProgress()