Как я могу просмотреть загруженный PDF-файл из хранилища firebase с помощью flutter?

#firebase #flutter #pdf #dart #firebase-storage

# #firebase #flutter #PDF #dart #firebase-хранилище

Вопрос:

Недавно я загрузил PDF-файл в хранилище firebase, выбрав pdf с помощью плагина file_picker. теперь файл успешно загружен :


введите описание изображения здесь

но когда я захожу в хранилище firebase: нажал на эту ссылку pdf, отображается СООБЩЕНИЕ ОБ ОШИБКЕ failed to load pdf decoument

введите описание изображения здесь

Код для выбора pdf с помощью file_picker

 void sendPdf() async {
   FilePickerResult result = await FilePicker.platform.pickFiles(
    
     type: FileType.custom,
   allowedExtensions: ['pdf'],
   );

   if(result != null) {
     File file = File(result.files.single.path);
       _storageMethods.uploadPdf(
       pdf: file, 
       uploaderId: widget.adminUser.uid,
       courseTitle:_courseTitleController.text,
       coursePrice:_coursePriceController.text,
      uploadProvider: _uploadProvider);
   } else {
     // User canceled the picker
   }
    
   
 }

 

Код для загрузки файла в хранилище firebase:

 Future<String> uploadPdfToStorage(File pdfFile) async {
   try {
     Reference ref = FirebaseStorage.instance.ref().child('pdfs/${DateTime.now().millisecondsSinceEpoch}');
   UploadTask uploadTask = ref.putFile(pdfFile, SettableMetadata(contentType: 'pdf')); 

    TaskSnapshot snapshot = await uploadTask;

   String url = await snapshot.ref.getDownloadURL();


 print("url:$url");
 return  url;
   } catch (e) {
     return null;
   }
 }

 
 

Комментарии:

1. Нам здесь особо не о чем говорить, поэтому я рекомендую предпринять еще несколько шагов по устранению неполадок самостоятельно. Например: если вы загружаете файл из консоли Firebase, можете ли вы открыть результат в формате PDF локально? Если нет, загрузка, вероятно, прошла неправильно.

2. Я предлагаю проверить, есть ли проблема с самим PDF-файлом. Код здесь может вообще не быть проблемой.

3. В файле pdf нет ничего плохого, теперь я обнаружил проблему, на самом деле я неправильно передавал contentType данные в хранилище. это не должно быть только pdf . это должно быть contentType: 'application/pdf' .

Ответ №1:

Обнаружили проблему с contentType

  UploadTask uploadTask = ref.putFile(pdfFile, SettableMetadata(contentType: 'pdf')); 
 

Я заменил на:

  UploadTask uploadTask = ref.putFile(pdfFile, SettableMetadata(contentType: 'application/pdf'));