Флаттер: как загрузить файл PDF в хранилище Firebase? - PullRequest
0 голосов
/ 05 сентября 2018

Я работаю над приложением 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();
   });


  }

1 Ответ

0 голосов
/ 01 августа 2019

Вы можете использовать эту зависимость 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 в базу данных в реальном времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...