Flutter使用flutter_downloader下载未知扩展名文件该如何处理?
解决方案
flutter_downloader默认从请求URL的末端提取文件名,当URL不包含文件名和后缀信息时,就会生成无扩展名的无名文件。你只有两类文件的场景可以直接通过手动指定保存文件名解决,操作如下:
核心修改点
调用FlutterDownloader.enqueue()时传入官方提供的可选参数saveFileName,手动指定带后缀的完整文件名即可。因为你明确只有两类文件,可以结合业务逻辑先判断当前下载任务所属的文件类型,再拼接对应后缀。
修改后完整代码示例
if (hasGranted) { String tempDir = await AndroidPathProvider.downloadsPath; // 根据业务逻辑判断当前文件类型,拼接对应后缀的文件名 String saveFileName; // 示例:假设task对象内有字段可区分两类文件,一类为PDF 一类为JPG格式 if (task.fileCategory == 1) { // 加入时间戳避免重名文件覆盖 saveFileName = "自定义文档名_${DateTime.now().millisecondsSinceEpoch}.pdf"; } else { saveFileName = "自定义图片名_${DateTime.now().millisecondsSinceEpoch}.jpg"; } task.taskId = await FlutterDownloader.enqueue( url: task.link!, savedDir: tempDir, // 新增参数指定保存文件名 saveFileName: saveFileName, showNotification: true, // 显示状态栏下载进度(仅Android端生效) openFileFromNotification: true, // 点击通知打开已下载文件(仅Android端生效) ); } else { setState(() { _checkPermission(); }); }
兜底方案(无明确文件分类标识时使用)
如果没有提前区分两类文件的标识,可以先发起一次HEAD请求获取下载链接的响应头,读取Content-Type字段映射对应的文件后缀:
application/pdf对应.pdfimage/jpeg对应.jpgimage/png对应.png- 其他类型可自行查MIME类型对应后缀表
不需要下载完整文件,仅请求响应头的性能消耗极低,不会影响下载效率。
内容的提问来源于stack exchange,提问作者Burak Mete Erdoğan
相关产品推荐
相关产品推荐

