You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用FlutterDownloader下载特定文件时出现权限异常问题

问题分析与解决方案

问题现象

  • 可正常下载的资源地址:https://cm.blazefast.co/1b/bb/1bbb3ad2d5d8e759166145fd82cfdbf6.jpg
  • 无法下载的资源地址(HTTP状态码返回200):https://lc3-cdn.t34798ndc.com/r25ZyBe/Fx8e_AxtJ_XMJ/M/Mx-4iJj-Mx-jVJj-wVJ/tM.0pUT0/XE.U/6lZG.pTcSUWW/tM.pTcSUWm-fa1.U/TU-UcSTSTDWHU.Yyk.jpg
  • 核心错误日志:
    W/System.err(11668): java.io.IOException: Operation not permitted
    ...
    E/DownloadWorker(11668): Create a file using java.io API failed
    ...
    W/System.err(11668): java.lang.NullPointerException
    

原因推测

你通过http.get能拿到200响应,但FlutterDownloader插件的默认请求头未通过目标CDN的校验,导致实际下载请求被限制,进而引发文件创建失败、空指针等连锁异常;或是插件对该类URL的响应处理存在兼容性问题。

解决方案

1. 给FlutterDownloader添加自定义请求头

模拟浏览器或你http.get请求的头信息(如User-Agent、Referer),确保CDN认可该请求:

await FlutterDownloader.enqueue(
  url: url,
  savedDir: savePath,
  fileName: isManga ? "$number.png" : "$number.mp4",
  showNotification: true,
  openFileFromNotification: true,
  headers: {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
    // 根据实际需求添加Referer等其他必要请求头
  },
);

2. 直接写入响应体替代FlutterDownloader

既然已通过http.get获取到响应内容,可跳过插件直接将文件写入本地:

var url2 = Uri.parse(url);
var response = await http.get(url2);
Directory a = Directory(savePath);
if (response.statusCode == 200 && await a.exists()) {
  try {
    final filePath = "$savePath/${isManga ? "$number.png" : "$number.mp4"}";
    final file = File(filePath);
    await file.writeAsBytes(response.bodyBytes);
    // 可自行添加下载完成的通知或状态更新逻辑
  } catch (error) {
    print(error);
  }
}

3. 确认目录权限细节

虽然第一个资源能正常下载,仍可确认savePath为应用专属目录,避免系统权限策略变化导致的异常:

import 'package:path_provider/path_provider.dart';

// 获取应用专属外部存储目录
final directory = await getExternalStorageDirectory();
final savePath = directory!.path;
// 或使用应用文档目录
// final directory = await getApplicationDocumentsDirectory();

内容的提问来源于stack exchange,提问作者AnimeZero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 14:43:37