#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
данные в хранилище. это не должно быть толькоcontentType: 'application/pdf'
.
Ответ №1:
Обнаружили проблему с contentType
UploadTask uploadTask = ref.putFile(pdfFile, SettableMetadata(contentType: 'pdf'));
Я заменил на:
UploadTask uploadTask = ref.putFile(pdfFile, SettableMetadata(contentType: 'application/pdf'));