如何查看使用GoogleDrive API的上传进度?
的.service.files()插入(身体,mediaContent).execute(); 只返回一个文件,我们可以检查文件是否完全上传.
但我需要实时检查进度(至少每秒钟左右),无论如何要做到这一点?
对于下载部分,我认为我们可以手动比较我们已经从输入流读取的总字节数的字节数,然后计算当前进度.
但这是正确的方法吗?还是有其他更好的检查进度的方法?
private void saveFileToDrive() {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try {
// File's binary content
java.io.File fileContent = new java.io.File(fileUri.getPath());
FileContent mediaContent = new FileContent("image/jpeg", fileContent);
// File's metadata.
File body = new File();
body.setTitle(fileContent.getName());
body.setMimeType("image/jpeg");
File file = service.files().insert(body, mediaContent).execute();
if (file != null) {
showToast("Photo uploaded: " + file.getTitle());
//startCameraIntent();
}
} catch (UserRecoverableAuthIOException e) {
startActivityForResult(e.getIntent(), REQUEST_AUTHORIZATION);
} catch (IOException …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Android中的驱动器API创建可恢复的上传会话.
根据文档,需要遵循的3个步骤是
第1步:我使用以下代码启动可恢复会话.
File body = new File();
body.setName(fileName);
body.setMimeType(mimeType);
body.setCreatedTime(modifiedDate);
body.setModifiedTime(modifiedDate);
body.setParents(Collections.singletonList(parentId));
HttpHeaders header = new HttpHeaders();
header.setContentLength(0L);
header.setContentType("application/json; charset=UTF-8");
header.set("X-Upload-Content-Type","image/jpeg");
HttpResponse response= driveObject
.files()
.create(body)
.setRequestHeaders(header)
.set("uploadType","resumable")
.buildHttpRequest()
.execute();
Run Code Online (Sandbox Code Playgroud)
第2步:执行完成后,我打印请求的响应头以查看位置URI
System.out.println(response.getHeader().toString());
Run Code Online (Sandbox Code Playgroud)
输出如下
{
cache-control=[no-cache, no-store, max-age=0, must-revalidate],
content-encoding=[gzip],
content-type=[application/json; charset=UTF-8],
date=[Thu, 06 Oct 2016 02:20:18 GMT],
expires=[Mon, 01 Jan 1990 00:00:00 GMT],
alt-svc=[quic=":443"; ma=2592000; v="36,35,34,33,32"],
pragma=[no-cache],
server=[GSE],
transfer-encoding=[chunked],
vary=[Origin, X-Origin],
x-android-received-millis=[1475720421761],
x-android-response-source=[NETWORK 200],
x-android-sent-millis=[1475720420804],
x-content-type-options=[nosniff],
x-frame-options=[SAMEORIGIN],
x-xss-protection=[1; mode=block]
}
Run Code Online (Sandbox Code Playgroud)
我没有在响应头中找到Location URI来开始上传文件中指定的filedata,也没有找到任何Java样本来执行可恢复上传.
如何检索文档中指定的位置URI?
我想使用驱动器api将大文件(> 10Mb)上传到Google云端硬盘.它适用于较小的文件(当有良好的wifi时),使用直接上传:
Drive.Files.Insert insert = driveService.files().insert(fileMetadata, mediaContent);
MediaHttpUploader uploader = insert.getMediaHttpUploader();
uploader.setChunkSize(UPLOAD_CHUNK_SIZE);
uploader.setDirectUploadEnabled(true);
insert.execute();
Run Code Online (Sandbox Code Playgroud)
现在,假设我们正在上传更大的文件.我们希望跟踪连接,因此我们使用MediaHttpUploader方法给出的可恢复上传...
uploader.setDirectUploadEnabled(false);
uploader.setProgressListener(new MediaHttpUploaderProgressListener() {
@Override
public void progressChanged(MediaHttpUploader mediaHttpUploader) throws IOException {
switch (mediaHttpUploader.getUploadState()) {
case INITIATION_STARTED: break;
case INITIATION_COMPLETE: break;
case MEDIA_IN_PROGRESS: break;
case MEDIA_COMPLETE: break;
}
}
});
Run Code Online (Sandbox Code Playgroud)
好.但是没有MEDIA_FAILED的状态,我是否正确?当上传未达到MEDIA_COMPLETE时,我该怎么办?
此外,我找不到恢复上传的方法.因此,即使100Mb上传率达到90%并且失败,我所能做的就是重新启动它?
PS:此问题之前已报告未成功 检查上传和下载的进度(适用于Android或Java的Google Drive API) Android Google Drive Resumable Upload经常失败