【问题标题】:Flutter: how can upload pdf file to firebase storage?Flutter:如何将pdf文件上传到firebase存储?
【发布时间】:2019-02-10 22:49:27
【问题描述】:

我正在开发一个 Flutter 应用,我想将 PDF 文件上传到 Firebase 存储, 我使用documents_picker选择文件,但我无法将其上传到存储...请帮助我...我的代码在下面

uploaddoc()async{


   dynamic docPaths;
   // Platform messages may fail, so we use a try/catch PlatformException.
   try {
     docPaths = await DocumentsPicker.pickDocuments;
     final Directory tempDir = Directory.systemTemp;
     final String fileName = "${Random().nextInt(10000)}.pdf";
     final File file = File('${tempDir.path}/$fileName');
     file.writeAsBytesSync(docPaths);

     final StorageReference ref = FirebaseStorage.instance.ref().child(fileName);
     final StorageUploadTask task = ref.putFile(file);
     final Uri downloadUrl = (await task.future).downloadUrl;
     _path = downloadUrl.toString();

     print(_path);
   } on PlatformException {

   }

   // If the widget was removed from the tree while the asynchronous platform
   // message was in flight, we want to discard the reply rather than calling
   // setState to update our non-existent appearance.
   if (!mounted)
     return;

   setState(() {
     _platformVersion = docPaths.toString();
   });


  }

【问题讨论】:

    标签: firebase flutter firebase-storage flutter-layout


    【解决方案1】:

    您可以使用此依赖项https://pub.dev/packages/file_picker 将任何类型的文件上传到数据库。

    final mainReference = FirebaseDatabase.instance.reference().child('Database');
    Future getPdfAndUpload()async{
      var rng = new Random();
      String randomName="";
      for (var i = 0; i < 20; i++) {
        print(rng.nextInt(100));
        randomName += rng.nextInt(100).toString();
      }
      File file = await FilePicker.getFile(type: FileType.CUSTOM, fileExtension: 'pdf');
      String fileName = '${randomName}.pdf';
      print(fileName);
      print('${file.readAsBytesSync()}');
      savePdf(file.readAsBytesSync(), fileName);
    }
    
    Future savePdf(List<int> asset, String name) async {
    
      StorageReference reference = FirebaseStorage.instance.ref().child(name);
      StorageUploadTask uploadTask = reference.putData(asset);
      String url = await (await uploadTask.onComplete).ref.getDownloadURL();
      print(url);
      documentFileUpload(url);
      return  url;
    }
    void documentFileUpload(String str) {
    
      var data = {
        "PDF": str,
      };
      mainReference.child("Documents").child('pdf').set(data).then((v) {
      });
    }
    

    通过这个您可以将文件上传到firebase存储并将url插入实时数据库。

    【讨论】:

      猜你喜欢
      • 2021-09-19
      • 2021-07-03
      • 2020-09-23
      • 2020-04-30
      • 2020-04-08
      • 2020-05-09
      • 2019-05-03
      • 2018-10-24
      • 2019-01-22
      相关资源
      最近更新 更多