我想将一些数据作为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存储中存在的同一文件一次又一次地执行读/写?
看到错误后,这意味着jsonString
不是base64字符串,这就是为什么它无法解码的原因。所以你可以这样尝试吗:
var json = {"name": "John", "age": 30, "car": "BMW"};
var jsonString = jsonEncode(json);
var bytes = utf8.encode(jsonString);
var base64Str = base64.encode(bytes);
var arr = base64.decode(base64Str); //arr will be Uint8list
所以基本上先对jsonString进行编码,然后解码它以给出Uint8List。请尝试一下,让我知道。这段代码在Dartpad上运行正常,所以希望它没问题。谢谢