我正在编写一个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)我没有使用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异常