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

Flutter使用Dio下载文件时遭遇HTTP 403错误求助

Flutter Dio下载图片出现HTTP 403错误的原因及解决办法

错误本质

HTTP 403状态码表示服务器拒绝了你的请求,和存储权限无关——你已配置存储权限,且错误栈明确显示问题出在Dio的请求阶段,而非文件写入阶段。

核心原因

Picsum Photos这类图片服务会拦截缺少合法User-Agent标识的请求。默认情况下Dio发起的请求未携带符合浏览器规范的User-Agent,被服务器判定为非合法请求,因此返回403。

解决办法

给Dio实例添加标准的User-Agent请求头,模拟浏览器请求:

修改downloadFile方法如下:

Future<void> downloadFile() async{
  Dio dio= Dio();
  // 添加浏览器标识的User-Agent
  dio.options.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';
  try{
    var dir= await getApplicationDocumentsDirectory();
    await dio.download(uri, "${dir.path}/myimg.jpg", onReceiveProgress: (rec,total){
        setState(() {
          downloading=true;
        });
    });
  }catch(e)
  {
    print("Error >> "+e.toString());
  }
  setState(() {
    downloading=false;
    print("Download Completes");
    });  
 }

额外优化

  • 移除不必要的权限:你是将文件存储到应用私有目录(getApplicationDocumentsDirectory()返回的路径),Android 10及以上版本不需要READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE权限,可以从AndroidManifest.xml中删除这两个权限,减少不必要的权限申请。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:15:42