Google Drive + Android:上传大文件时意外结束

时间:2012-12-25 17:05:10

标签: android google-drive-api

我有一个Android应用程序,可以在云中上传文件的压缩备份。

直到最近,我一直使用Dropbox并且它运行良好。

最近我决定实施对Google云端硬盘的支持。

当文件较小(大约15Mb)时,它正在工作......大部分时间(有时我在上传开始后会收到401错误)。

当文件很大(> 1Gb)时,我总是收到错误:

java.io.IOException: unexpected end of stream

这是我的代码:

public CloudResult sendFile(File fileContent, long added) {
    CloudResult result = new CloudResult();

    try {

        mProgress = new FileUploadProgressListener(fileContent.getName());
        mediaContent = new FileContent(ZIP_MIME_TYPE, fileContent);

        com.google.api.services.drive.model.File body = new com.google.api.services.drive.model.File();
        body.setTitle(fileContent.getName());
        body.setMimeType(ZIP_MIME_TYPE);

        Drive.Files.Insert inserted = getDrive().files().insert(body, mediaContent);
        inserted.getMediaHttpUploader()
                .setDirectUploadEnabled(false)
                .setChunkSize(MediaHttpUploader.DEFAULT_CHUNK_SIZE)
                .setProgressListener(mProgress);

        com.google.api.services.drive.model.File f = inserted.execute();

        // loop over all files in drive and see if any need to be
        // synced locally
        FileList driveFilesList = getDrive().files().list().execute();

        mTotalUploaded = added;
        for (com.google.api.services.drive.model.File remote : driveFilesList.getItems()) {
            Log.d(Ln.TAG, remote.getLabels().toPrettyString());
        }
    } catch (IOException e) {
        result = new CloudResult(getClass().getSimpleName() + " - " + e.getLocalizedMessage());
        if (Ln.DEBUG) {
            Log.e(Ln.TAG, "Error in GDrive - " + e.getLocalizedMessage(), e);
        }
    }
    return result;
}

由于我没有真正控制InputStream,我不知道该怎么做。

我在这个过程中已经有了一些吵架。

所有内容都在服务中的线程中执行。该服务与Dropbox相同,因此错误与此代码的执行方式无关。它在别的地方,但我不知道在哪里!可能是GDrive的错误。

我找到了这些帖子,但没有真正的答案: Uploading jpeg to Google Drive from Android app "unexpected end of stream"

有什么想法吗?

第二个问题:如何获取线性进度监听器,而不是上传每个chunck后调用的内容(此处每10Mb)?

0 个答案:

没有答案