Jak sprawdzić postęp przesyłania z wykorzystaniem interfejsu API GoogleDrive?Sprawdzanie postępów w zakresie przesyłania i pobierania (Google Drive API dla Androida lub Java)
The service.files(). Insert (body, mediaContent) .execute(); Zwróć tylko plik plik, który możemy sprawdzić, czy plik został całkowicie załadowany.
Ale czy muszę to sprawdzić w czasie rzeczywistym (przynajmniej co sekundę), czy tak jest?
W przypadku części do pobrania uważam, że możemy ręcznie porównać liczbę odczytanych już bajtów z strumienia wejściowego do całkowitego rozmiaru pliku, a następnie obliczyć obecny postęp.
Ale czy to jest właściwy sposób? Czy istnieje inny lepszy sposób sprawdzania postępu?
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 e) {
e.printStackTrace();
}
}
});
t.start();
}
edycja: Za pomocą tego kodu http://code.google.com/p/google-api-java-client/source/browse/drive-cmdline-sample/src/main/java/com/google/api/services/samples/drive/cmdline/DriveSample.java?repo=samples&name=based-on-1.12&r=08555cd2a27be66dc97505e15c60853f47d84b5a
jestem w stanie uzyskać pewien postęp jeśli teraz używam możliwego do wznowienia przesyłania, ustawić chunksize do 1MB. ALE są teraz 2 problemy.
1) Przesyłanie do wznowienia jest znacznie wolniejsze niż przesyłanie pojedynczego pliku, ponieważ zatrzymuje się wiele razy pomiędzy, wysyłając tylko 1 MB za każdym razem.
Jeśli ustawię porcję na wyższą, to w ogóle nie wskaże postępu dla mniejszego pliku.
Tak więc postęp w przesyłaniu do wznowienia nie jest tym, czego naprawdę chcę. Chcę postępu w pojedynczym przesyłaniu.
2) Jeśli ustawię rozmiar na około 1 MB, mój upload zawsze będzie miał wartość nieudaną na poziomie około 70% dla normalnego pliku 10 MB.
Jeśli ustawię porcję na 10 MB, odniesie sukces, ale nie zobaczę żadnego postępu.
Drive.Files.Insert insert = service.files().insert(body, mediaContent);
MediaHttpUploader uploader = insert.getMediaHttpUploader();
uploader.setDirectUploadEnabled(false);
uploader.setChunkSize(10*1024*1024); // previously I am using 1000000 thats why it won't work
uploader.setProgressListener(new FileUploadProgressListener());
com.google.api.services.drive.model.File f = insert.execute();
LogCat Błąd:
11-27 19:23:26.927: D/FileUploadProgressListener(11527): Upload is In Progress: 0.5235538030501893
11-27 19:23:33.692: D/FileUploadProgressListener(11527): Upload is In Progress: 0.56095050326806
11-27 19:23:38.294: D/FileUploadProgressListener(11527): Upload is In Progress: 0.5983472034859306
11-27 19:23:50.583: D/FileUploadProgressListener(11527): Upload is In Progress: 0.6357439037038013
11-27 19:23:55.091: D/FileUploadProgressListener(11527): Upload is In Progress: 0.673140603921672
11-27 19:24:05.130: D/FileUploadProgressListener(11527): Upload is In Progress: 0.7105373041395426
11-27 19:24:17.005: D/FileUploadProgressListener(11527): Upload is In Progress: 0.7479340043574133
11-27 19:24:28.888: D/FileUploadProgressListener(11527): Upload is In Progress: 0.785330704575284
11-27 19:24:28.896: W/HttpTransport(11527): exception thrown while executing request
11-27 19:24:28.896: W/HttpTransport(11527): java.io.IOException: unexpected end of stream
11-27 19:24:28.896: W/HttpTransport(11527): at libcore.net.http.FixedLengthOutputStream.close(FixedLengthOutputStream.java:58)
11-27 19:24:28.896: W/HttpTransport(11527): at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:88)
11-27 19:24:28.896: W/HttpTransport(11527): at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:980)
11-27 19:24:28.896: W/HttpTransport(11527): at com.google.api.client.googleapis.media.MediaHttpUploader.upload(MediaHttpUploader.java:293)
11-27 19:24:28.896: W/HttpTransport(11527): at com.google.api.services.drive.Drive$Files$Insert.executeUnparsed(Drive.java:309)
11-27 19:24:28.896: W/HttpTransport(11527): at com.google.api.services.drive.Drive$Files$Insert.execute(Drive.java:331)
działa teraz, JEŚLI ustawię rozmiar na wielokrotność 2, na przykład: 10 * 1024 * 1024. Wcześniej dostaję błąd, ponieważ używam 1000000. – tcboy88