【问题标题】:How to upload JSON file in firebase storage (FLUTTER)?如何在 Firebase 存储(FLUTTER)中上传 JSON 文件?
【发布时间】: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


【解决方案1】:

看到错误后,这意味着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 上运行正常,所以希望它没问题。谢谢

【讨论】:

    猜你喜欢
    • 2019-05-03
    • 2019-02-10
    • 2019-01-26
    • 2021-09-19
    • 2021-07-03
    • 2018-11-16
    • 2022-11-16
    • 2020-04-30
    • 2019-01-20
    相关资源
    最近更新 更多