如何在Firebase存储(FLUTTER)中上传JSON文件?



我想将一些数据作为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上运行正常,所以希望它没问题。谢谢

最新更新