从Android缓慢上传5 kbps到谷歌云存储



我正在编写一个Android应用程序,希望使用谷歌云存储来存储潜在的大型媒体文件。我使用JSON API的Java客户端库:com.google.API.services.storage.

我的问题是表现。我确信我一定做错了什么。我已经可以上传文件了,但速度慢得离谱。传输一个1.5 MB的图像文件大约需要5分钟,所以大约是5 kbps,这对我的应用程序来说是不可用的。我已经为我的应用程序启用了计费,但我处于免费级别。这肯定不是预期的性能水平吗?我正在宽带wifi上的Galaxy S4上测试这个。我正在使用服务帐户OAUth客户端密钥访问GCS。

我尝试过使用和不使用gzip编码,使用和不直接(不可恢复)上传,以及使用不同的块大小——默认值、最小值、最小倍数等。在所有情况下,我都得到了类似的结果。这是我的上传功能:

public void uploadFile(String bucketName, String filePath, String mimeType, String gcsFilename, IOProgress ioProgress)
        throws IOException {
    StorageObject object = new StorageObject();
    object.setBucket(bucketName);
    File file = new File(filePath);
    Long fileSize = file.length();
    Log.d(TAG, "uploadFile START: " + bucketName + ":" + gcsFilename + " -> " + filePath);
    try (InputStream stream = new FileInputStream(file)) {
        InputStreamContent content = new InputStreamContent(mimeType,
                stream);
        Storage.Objects.Insert insert = storage.objects().insert(
                bucketName, null, content);
        insert.setName(gcsFilename);
        insert.getMediaHttpUploader().setDisableGZipContent(true); // this seems to help to disable... at least when debugging
        // insert.getMediaHttpUploader().setDirectUploadEnabled(true);
        insert.getMediaHttpUploader().setChunkSize(MediaHttpUploader.MINIMUM_CHUNK_SIZE);
        if (ioProgress != null) {
            insert.getMediaHttpUploader().setProgressListener(new CloudUploadProgressListener(ioProgress, fileSize));
        }
        insert.execute();
        Log.d(TAG, "uploadFile FINISH: " + bucketName + ":" + gcsFilename + " -> " + filePath);
    }
}

我的问题有两个方面。

1) 我没有使用com.google.api.client.http.javanet.NetHttpTransport,而是使用com.google.api.client.http.apache.ApachHttpTransport并看到速度提高了大约5倍。

这还修复了一个单独的问题,即我在进行GCS传输后立即尝试使用Google Cloud端点(使用NetHttpTransport)时出现套接字错误。

2) 在使用ADB进行调试的同时尝试运行上传是造成其余差异的原因。使用ApacheHttpTransport在非调试模式下运行使我的传输速度达到约1.4Mbps,而我的本地网络的容量约为1.8Mbps。

顺便说一句,我试图使用JetS3t,但遇到了这个确切的问题:在Android 上使用JetS3t时引发了不兼容ClassChangeError异常

最新更新