从Android上传到Google云端存储的速度缓慢下降5 kbps

 普林 发布于 2023-02-13 23:10

我正在编写一个Android应用程序,并希望使用Google云端存储来存储潜在的大型媒体文件.我正在使用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);
    }
}

Preston Land.. 9

我的问题是双重的.

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

这也解决了一个单独的问题,即我在执行GCS传输后立即尝试使用Google Cloud Endpoints(使用NetHttpTransport)时出现套接字错误.

2)尝试使用ADB进行调试时运行上载占其余的差异.使用ApacheHttpTransport以非调试模式运行使我的传输速度达到大约1.4 Mbps,我的本地网络容量大约为1.8 Mbps.

顺便说一句,我试图使用JetS3t,但遇到了这个问题:在Android上使用JetS3t时抛出IncompatibleClassChangeError异常

1 个回答
  • 我的问题是双重的.

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

    这也解决了一个单独的问题,即我在执行GCS传输后立即尝试使用Google Cloud Endpoints(使用NetHttpTransport)时出现套接字错误.

    2)尝试使用ADB进行调试时运行上载占其余的差异.使用ApacheHttpTransport以非调试模式运行使我的传输速度达到大约1.4 Mbps,我的本地网络容量大约为1.8 Mbps.

    顺便说一句,我试图使用JetS3t,但遇到了这个问题:在Android上使用JetS3t时抛出IncompatibleClassChangeError异常

    2023-02-13 23:37 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有