Ari*_*Roy 6 android firebase firebase-storage
故事
我在应用程序中使用Firebase Storage将大文件上传到Firebase Storage。文件主要是视频,有时甚至会大于2 GB。
我做了什么
这就是我所做的。
UploadTask originalUpload = originalDestination.putFile(Uri.fromFile(originalSource));
mCurrentUploadTask = originalUpload;
originalUpload.addOnProgressListener(mOnProgressUpdateListener);
originalUpload.addOnSuccessListener(mOriginalSuccessListener);
Run Code Online (Sandbox Code Playgroud)
只是为了告知,我还需要将这些同步任务转换为异步,因为我需要使用
Tasks.await(originalUpload);
Run Code Online (Sandbox Code Playgroud)
问题
这个问题很奇怪而且出乎意料。上传/下载效果很好,但是速度很慢。
我的互联网连接速度为1 MBps,但是这些文件从未以这种速度传输。它大约为100-150 KBps,几乎是我网络可用速度的15%。
在声明之前,我已经在多个不同的网络上对此进行了多次测试。我无处发现Firebase会充分利用可用带宽,而其他非Firebase的下载/上传则可以全速运行。
我的应用需要下载和上传大文件,因此无法承受如此缓慢的速度。Firebase完全没有想到这一点。
如果我在实现中做任何错误或Firebase固有的问题,请告诉我。
更新
我也遇到了一个问题,只有上传。每当我下载某些内容并关闭Wifi时,都会由于该错误而取消下载。
com.google.firebase.storage.StorageException: An unknown error occurred, please check the HTTP result code and inner exception for server response.
Read error: ssl=0xb7e7a510: I/O error during system call, Connection timed out
javax.net.ssl.SSLException: Read error: ssl=0xb7e7a510: I/O error during system call, Connection timed out
at com.android.org.conscrypt.NativeCrypto.SSL_read(Native Method)
at com.android.org.conscrypt.OpenSSLSocketImpl$SSLInputStream.read(OpenSSLSocketImpl.java:699)
at com.android.okio.Okio$2.read(Okio.java:113)
at com.android.okio.RealBufferedSource.read(RealBufferedSource.java:48)
at com.android.okhttp.internal.http.HttpConnection$FixedLengthSource.read(HttpConnection.java:446)
at com.android.okio.RealBufferedSource$1.read(RealBufferedSource.java:168)
at java.io.InputStream.read(InputStream.java:162)
at com.google.firebase.storage.FileDownloadTask.run(Unknown Source)
at com.google.firebase.storage.StorageTask$5.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
Run Code Online (Sandbox Code Playgroud)
但是,当我对上传执行完全相同的操作时,它只是等待连接,如果我再次打开Wifi,它将重新连接并恢复。为什么问题仅在下载文件时发生?再次遇到getFile()API问题吗?
仅供参考,我尚未更改上传和下载的超时设置。它们是默认值。
我提出这个并不是为了反驳你的观察,只是作为一个比较点。作为测试,我使用下面的代码上传约 50MB 的文件并对进度进行计时。该测试在具有家庭 WiFi 连接的三星 Galaxy S3 (4.4.2) 上运行(位于加利福尼亚州)。平均吞吐量约为 760KB/秒。
我在使用相同网络的其他手机设备上进行了相同的测试,吞吐量范围从 300KB/秒到 850KB/秒(Moto X Pure;Marshmallow)。
private void uploadTest() {
// This file is ~50MB
final File file = new File("/storage/emulated/0/DCIM/Camera/20160821_101145.mp4");
// Upload the file
Log.i(TAG, String.format("uploadTest: Starting upload of %5.2fMB file",
file.length()/1024.0/1024.0));
FirebaseStorage.getInstance().getReference("test").putFile(Uri.fromFile(file))
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Log.i(TAG, "onSuccess: Done");
}
}).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
Log.i(TAG, String.format("onProgress: %5.2f MB transferred",
taskSnapshot.getBytesTransferred()/1024.0/1024.0));
}
});
}
Run Code Online (Sandbox Code Playgroud)
这是生成的 logcat,删除了一些进度行以使列表更加紧凑:
08-21 11:39:17.539 18427-18427/com.qbix.test I/MainActivity: uploadTest: Starting upload of 51.79MB file
08-21 11:39:17.559 18427-18427/com.qbix.test I/MainActivity: onProgress: 0.00 MB transferred
08-21 11:39:25.117 18427-18427/com.qbix.test I/MainActivity: onProgress: 5.00 MB transferred
08-21 11:39:31.654 18427-18427/com.qbix.test I/MainActivity: onProgress: 10.00 MB transferred
08-21 11:39:38.711 18427-18427/com.qbix.test I/MainActivity: onProgress: 15.00 MB transferred
08-21 11:39:45.088 18427-18427/com.qbix.test I/MainActivity: onProgress: 20.00 MB transferred
08-21 11:39:51.375 18427-18427/com.qbix.test I/MainActivity: onProgress: 25.00 MB transferred
08-21 11:39:57.411 18427-18427/com.qbix.test I/MainActivity: onProgress: 30.00 MB transferred
08-21 11:40:03.408 18427-18427/com.qbix.test I/MainActivity: onProgress: 35.00 MB transferred
08-21 11:40:10.886 18427-18427/com.qbix.test I/MainActivity: onProgress: 40.00 MB transferred
08-21 11:40:17.233 18427-18427/com.qbix.test I/MainActivity: onProgress: 45.00 MB transferred
08-21 11:40:23.069 18427-18427/com.qbix.test I/MainActivity: onProgress: 50.00 MB transferred
08-21 11:40:25.792 18427-18427/com.qbix.test I/MainActivity: onProgress: 51.79 MB transferred
08-21 11:40:25.792 18427-18427/com.qbix.test I/MainActivity: onSuccess: Done
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5800 次 |
| 最近记录: |