【问题标题】:How can I upload PDF file in firebase storage and generate download URL and save firebase using Flutter?如何在 Firebase 存储中上传 PDF 文件并生成下载 URL 并使用 Flutter 保存 Firebase?
【发布时间】:2021-11-06 00:07:32
【问题描述】:

我在代码下方尝试过,但遇到了问题:

未处理的异常:空值检查运算符用于空值

FirebaseStorage storage = FirebaseStorage.instance;

FilePickerResult? result = await FilePicker.platform.pickFiles(
  type: FileType.custom,
  allowedExtensions: ['pdf'],
  withData: true
);

if (result != null) {
  Uint8List? fileBytes = result.files.first.bytes;
  String fileName = result.files.first.name;

  // Upload PDF file
  TaskSnapshot taskSnapshot = await storage.ref('CV/$fileName').putData(fileBytes!);
  String pdfUrl = await taskSnapshot.ref.getDownloadURL();

  print('pdf url: $pdfUrl');

}

【问题讨论】:

    标签: flutter firebase-storage


    【解决方案1】:

    您收到错误是因为 fileBytes 变量在运行时为空,并且您在其上使用了空检查运算符。

    选择文件中出现空字节的原因是默认情况下,pickFiles 方法不返回字节数据(web 除外)。您需要将withData 设置为true 并且null 错误应该会消失。

    如果设置了 withData,拾取的文件将立即获得其字节数据 在内存中作为 Uint8List 可用,如果您是 选择它用于服务器上传或类似的。但是,请记住 在 IO(iOS 和 Android)上启用此功能可能会导致内存不足问题 如果您允许多个选择或选择大文件。使用 withReadStream 反而。在 web 上默认为 true,否则为 false。

    Source

    将您的代码更新为:

    FilePickerResult? result = await FilePicker.platform.pickFiles(
      type: FileType.custom,
      allowedExtensions: ['pdf'],
      withData: true
    );
    

    【讨论】:

    • 非常感谢,它正在工作。用于生成 PDF 下载 URL:TaskSnapshot taskSnapshot = await storage.ref('CV/$fileName').putData(fileBytes!); String pdfUrl = 等待 taskSnapshot.ref.getDownloadURL();
    猜你喜欢
    • 1970-01-01
    • 2020-05-24
    • 2019-02-10
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    • 2020-09-23
    相关资源
    最近更新 更多