【发布时间】:2020-09-27 09:24:25
【问题描述】:
我想将一些数据作为 JSON 文件上传到 Firebase 存储并对其执行读/写操作。我对 Flutter 有点陌生,不知道该怎么做。
目前,我已将一些 JSON 数据转换为 BLOB 并尝试将其上传到 firebase,但使用此方法时出现错误。
这是上传数据的代码
uploadToStorage(file) async {
var json = {"name": "John", "age": 30, "car": "BMW"};
var jsonString = jsonEncode(json);
var blob = new Blob([jsonString], "application/json");
StorageReference firebaseStorageRef = FirebaseStorage.instance.ref();
var fileRef = firebaseStorageRef.child("/files/test-file.json");
StorageUploadTask uploadTask = fileRef.putData(blob); // The argument type 'Blob' can't be assigned to the parameter type 'Uint8List'.
StorageTaskSnapshot taskSnapshot = await uploadTask.onComplete;
var downloadUrl = await taskSnapshot.ref.getDownloadURL();
return downloadUrl;
}
这里的错误是类型错误,但我不知道如何上传数据或将其更改为 Uint8List。
这是我尝试使用 Uint8List data = base64.decode(jsonString); 将 JSON 字符串更改为 Uint8List 时遇到的错误
E/flutter ( 9204): #0 _Base64Decoder.decodeChunk (dart:convert/base64.dart:694:7)
E/flutter ( 9204): #1 _Base64Decoder.decode (dart:convert/base64.dart:618:14)
E/flutter ( 9204): #2 Base64Decoder.convert (dart:convert/base64.dart:498:26)
E/flutter ( 9204): #3 Base64Codec.decode (dart:convert/base64.dart:82:47)
E/flutter ( 9204): #4 StorageUploadState.uploadToStorage
package:delivero_demo_app/main.dart:102
E/flutter ( 9204): #5 StorageUploadState.callUploadToFirebase
package:delivero_demo_app/main.dart:90
E/flutter ( 9204): #6 StorageUploadState.initState
package:delivero_demo_app/main.dart:43
E/flutter ( 9204): #7 StatefulElement._firstBuild
package:flutter/…/widgets/framework.dart:4682
E/flutter ( 9204): #8 ComponentElement.mount
package:flutter/…/widgets/framework.dart:4518
E/flutter ( 9204): #9 Element.inflateWidget
package:flutter/…/widgets/framework.dart:3488
E/flutter ( 9204): #10 Element.updateChild
package:flutter/…/widgets/framework.dart:3256
E/flutter ( 9204): #11 SingleChildRenderObjectElement.mount
package:flutter/…/widgets/framework.dart:5872
E/flutter ( 9204): #12 Element.inflateWidget
package:flutter/…/widgets/framework.dart:3488
E/flutter ( 9204): #13 Element.updateChild
package:flutter/…/widgets/framework.dart:3256
E/flutter ( 9204): #14 ComponentElement.performRebuild
package:flutter/…/widgets/framework.dart:4569
E/flutter ( 9204): #15 Element.rebuild
package:flutter/…/widgets/framework.dart:4260
E/flutter ( 9204): #16 ComponentElement._firstBuild
package:flutter/…/widgets/framework.dart:4523
E/flutter ( 9204): #17 ComponentElement.mount
package:flutter/…/widgets/framework.dart:4518
E/flutter ( 9204): #18 Element.inflateWidget
package:flutter/…/widgets/framework.dart:3488
E/flutter ( 9204): #19 Element.updateChild
package:flutter/…/widgets/framework.dart:3256
E/flutter ( 9204): #20 SingleChildRenderObjectElement.mount
package:flutter/…/widgets/framework.dart:5872
E/flutter ( 9204): #21 Element.inflateWidget
package:flutter/…/widgets/framework.dart:3488
E/flutter ( 9204): #22 Element.updateChild
package:flutter/…/widgets/framework.dart:3256
E/flutter ( 9204): #23 SingleChildRenderObjectElement.mount
package:flutter/…/widgets/framework.dart:5872
E/flutter ( 9204): #24 Element.inflateWidget
package:flutter/…/widgets/framework.dart:3488
E/flutter ( 9204): #25 Element.updateChild
package:flutter/…/widgets/framework.dart:3256
E/flutter ( 9204): #26 ComponentElement.performRebuild
package:flutter/…/widgets/framework.dart:4569
E/flutter ( 9204): #27 StatefulElement.performRebuild
package:flutter/…/widgets/framework.dart:4717
E/flutter ( 9204): #28 Element.rebuild
package:flutter/…/widgets/framework.dart:4260
E/flutter ( 9204): #29 ComponentElement._firstBuild
package:flutter/…/widgets/framework.dart:4523
E/flutter ( 9204): #30 StatefulElement._firstBuild
package:flutter/…/widgets/framework.dart:4708
E/flutter ( 9204): #31 ComponentElement.mount
package:flutter/…/widgets/framework.dart:4518
E/flutter ( 9204): #32 Element.inflateWidget
package:flutter/…/widgets/framework.dart:3488
E/flutter ( 9204): #33 Element.updateChild
package:flutter/…/widgets/framework.dart:3256
E/flutter ( 9204): #34 SingleChildRenderObjectElement.mount
package:flutter/…/widgets/framework.dart:5872
E/flutter ( 9204): #35 Element.inflateWidget
package:flutter/…/widgets/framework.dart:3488
E/flutter ( 9204): #36 Element.updateChild
package:flutter/…/widgets/framework.dart:3256
E/flutter ( 9204): #37 SingleChildRenderObjectElement.mount
package:flutter/…/widgets/framework.dart:5872
E/flutter ( 9204): #38 Element.inflateWidget
package:flutter/…/widgets/framework.dart:3488
E/flutter ( 9204): #39 Element.updateChild
package:flutter/…/widgets/framework.dart:3256
E/flutter ( 9204): #40 ComponentElement.performRebuild
package:flutter/…/widgets/framework.dart:4569
E/flutter ( 9204): #41 StatefulElement.performRebuild
package:flutter/…/widgets/framework.dart:4717
E/flutter ( 9204): #42 Element.rebuild
package:flutter/…/widgets/framework.dart:4260
E/flutter ( 9204): #43 ComponentElement._firstBuild
package:flutter/…/widgets/framework.dart:4523
E/flutter ( 9204): #44 StatefulElement._firstBuild
package:flutter/…/widgets/framework.dart:4708
E/flutter ( 9204): #45 ComponentElement.mount
package:flutter/…/widgets/framework.dart:4518
E/flutter ( 9204): #46 Element.inflateWi
任何帮助都会很棒。此外,是否可以在 firebase 存储中存在的同一个文件上一次又一次地执行读/写?
【问题讨论】:
-
请同时发布错误
-
@MohammadAssadArshad 我在评论中提到我拥有的数据类型是 Blob 但
putData函数需要Uint8List那么如何将数据转换为该类型或是否有其他类型方法来做到这一点。这是类型错误 -StorageUploadTask uploadTask = fileRef.putData(blob); // The argument type 'Blob' can't be assigned to the parameter type 'Uint8List'. -
抱歉没有看到你的评论;你可以试试这个而不是使用 blob `var arr = base64.decode(jsonString);` 这会给你一个 Uint8List,你可以将它传递给 fileRef.putData。
-
@MohammadAssadArshad 我添加了使用此方法时遇到的错误。有没有其他方法可以简单地将 JSON 数据上传到 Firebase 存储并对其进行编辑?
-
我不太确定其他方法,但错误给了我一个想法,我在下面的答案中写了这个想法。请检查一下。谢谢
标签: json firebase flutter dart firebase-storage