Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 谷歌硬盘在v3中可恢复上传_Java_Android_Google Drive Api - Fatal编程技术网

Java 谷歌硬盘在v3中可恢复上传

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(...);

我正在寻找一些帮助/示例,以使用Java中新的v3 REST API执行可恢复上传到Google Drive

我知道这里有一个低级描述:。但目前,如果没有其他更简单的方法(比如以前的MediaHttpUploader,现在不推荐使用),我不愿意理解这些低级请求中的任何一个

我现在做的是:

    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()