Flutter firebase 存储插件需要大量时间来上传文件

Posted

技术标签:

【中文标题】Flutter firebase 存储插件需要大量时间来上传文件【英文标题】:Flutter firebase storage plugin taking a lot of time to upload file 【发布时间】:2018-11-16 11:32:26 【问题描述】:

我正在使用 Flutter 开发 android 应用。在我的应用程序中,有一个功能,用户可以从他们的设备上传图像。对于存储图像,我使用的是 Firebase 云存储,这是我用于将文件上传到 Firebase 云存储的部分代码。

String fileName = "$this.userDetails['id']_$uuid.v1()";
String fileExtension = p.extension(_imageFile.path);
String newFileName = p.setExtension(fileName, fileExtension);

print("STEP 1: New filename of image - 111: $newFileName");

final StorageReference ref = FirebaseStorage.instance.ref().child("images/users/original/$newFileName");
final StorageUploadTask uploadTask = ref.put(
            _imageFile, const StorageMetadata(contentLanguage: "en")
        );

print("STEP 2: Image file uploaded - 222");

final Uri downloadUrl = (await uploadTask.future).downloadUrl;
print('STEP 3: downloadUrl data received - 333 : $downloadUrl');

final http.Response downloadData = await http.get(downloadUrl);
print('STEP 4: Download data received - 444 : $downloadData.body');

这里有 3 个相关的 Flutter 插件,我正在使用它们帮助上面的代码上传文件。

import 'package:uuid/uuid.dart';
import 'package:path/path.dart' as p;
import 'package:firebase_storage/firebase_storage.dart';

一切正常。除了,文件上传需要很多时间。完成 STEP-3 (print('STEP 3: downloadUrl data received - 333 : $downloadUrl');) 几乎需要 40-50 多秒。有时也是1分半钟。关于我的互联网速度,它有近 80Mbps 的上传和下载速度。我的平均上传的图片大小为 100kB。

需要一些帮助来解决。出了什么问题。

从我的 Android Studio 日志中添加屏幕截图(文件大小为 2.8 MB) -

I/flutter ( 4451): cliked on image upload button
I/flutter ( 4451): Loading animation started
I/flutter ( 4451): 2018-06-06 23:15:30.327722 - STEP 1: New file name got - 111: KyvU5PFfLRPxYFwHaiKHuywilMV2_679b9ee0-4800-11e8-fe1b-7f6c98d5147d.png
I/flutter ( 4451): 2018-06-06 23:15:30.329420 - STEP 2: Image file uploaded - 222
W/DynamiteModule( 4451): Local module descriptor class for com.google.android.gms.firebasestorage not found.
W/zygote64( 4451): Unsupported class loader
W/zygote64( 4451): Skipping duplicate class check due to unsupported classloader
I/DynamiteModule( 4451): Considering local module com.google.android.gms.firebasestorage:0 and remote module com.google.android.gms.firebasestorage:6
I/DynamiteModule( 4451): Selected remote version of com.google.android.gms.firebasestorage, version >= 6
W/zygote64( 4451): Unsupported class loader
W/zygote64( 4451): Skipping duplicate class check due to unsupported classloader
I/FlutterActivityDelegate( 4451): onResume setting current activity to this
D/UploadTask( 4451): Increasing chunk size to 524288
D/UploadTask( 4451): Increasing chunk size to 1048576
D/UploadTask( 4451): Increasing chunk size to 2097152
I/flutter ( 4451): 2018-06-06 23:17:43.445542 - STEP 3: downloadUrl image data - 333 : 
I/flutter ( 4451): 2018-06-06 23:17:46.757227 - STEP 4: Download data - 444 : ÿØÿá1(Exif

注意:这可能是插件问题。所以,在 Github 上提交了一个问题

链接:https://github.com/flutter/flutter/issues/18325

【问题讨论】:

很难想象 Flutter 中的任何内容都会比通过 Internet 本身上传所需的时间更长,即使连接速度很快。 100kb 应在 1-2 秒内上传。你是在模拟器还是真机上运行? 在真机上。 这是我刚刚记录的一些额外信息2018-06-06 23:15:30.327722 - STEP 1, 2018-06-06 23:15:30.329420 - STEP 2, 2018-06-06 23:17:43.445542 - STEP 3, 2018-06-06 23:17:46.757227 - STEP 4。在帖子中附上了我的 android studio 的完整截图。也许它会给一些前景。 为什么await _imageFile @Tree 我的错误。我删除了它并上传了一张 2.5MB 的新照片,花了大约 2.13 分钟。这是日志状态 - 2018-06-07 21:53:01.365738 - STEP 1, 2018-06-07 21:53:01.367466 - STEP 2, 2018-06-07 21:55:14.857864 - STEP 3, 2018-06-07 21:55:22.790003 - STEP 4 【参考方案1】:

我最近尝试过使用firebase_storage: ^7.0.0,上传一张 1MB 的图片只需要几秒钟。

您是否尝试过最新版本的firebase_storage 插件并查看相同的行为是否仍然存在?鉴于提供的日志,除了上传图像所花费的时间之外,它似乎没有表明任何问题。您也可以尝试通过不同的网络(即移动设备)上传文件,看看是否有任何不同。

【讨论】:

你能说出chunksize的单位是byte还是kb`将块大小增加到2097152`

以上是关于Flutter firebase 存储插件需要大量时间来上传文件的主要内容,如果未能解决你的问题,请参考以下文章

Flutter - 将图像上传到 Firebase 存储

用于 Flutter 桌面嵌入的 Firebase 身份验证插件

Flutter 本地通知 int id 参数

Flutter - 无法构建插件 firebase_core

如何在 Flutter 中从 firebase 存储读取和写入文本文件?

带有一个适用于android、ios、web的插件的flutter firebase(实时)数据库? [复制]