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

Flutter Web部署至IIS后showSaveFilePicker函数失效问题

解决Flutter Web部署到IIS后showSaveFilePicker不可用的问题

问题根源

window.showSaveFilePicker属于File System Access API,该API有严格的运行环境限制:

  • 仅在安全上下文中可用(即HTTPS协议或localhost本地环境)
  • 本地调试时用的是localhost,属于浏览器认可的安全上下文,所以功能正常;但部署到IIS如果使用HTTP协议,会触发浏览器安全限制,导致API被禁用,抛出TypeError: window.showSaveFilePicker is not a function错误。

解决方案

方案1:将IIS站点配置为HTTPS

这是符合API要求的标准解决方案,步骤如下:

  • 在IIS中为站点申请或导入SSL证书(测试环境可使用自签证书,生产环境建议使用正规CA颁发的证书)
  • 打开站点的「绑定」设置,添加HTTPS绑定并选择对应的SSL证书
  • 访问项目时使用https://你的域名/路径,此时浏览器会识别为安全上下文,showSaveFilePicker即可正常工作

方案2:改用兼容所有环境的传统下载方式

如果无法配置HTTPS,或者需要兼容更多浏览器环境,可以放弃File System Access API,改用HTML5的传统文件下载逻辑,修改app.js中的saveFile函数:

function saveFile(blob, fileName) {
  // 创建临时URL指向Blob资源
  const url = URL.createObjectURL(blob);
  // 创建隐藏的a标签触发下载
  const downloadLink = document.createElement('a');
  downloadLink.href = url;
  downloadLink.download = fileName;
  // 触发点击后清理临时资源
  document.body.appendChild(downloadLink);
  downloadLink.click();
  document.body.removeChild(downloadLink);
  URL.revokeObjectURL(url);
}

这个方法无需依赖特殊API,在HTTP/HTTPS环境下都能正常工作,兼容性覆盖所有现代浏览器。

验证步骤

  1. 若选方案1:部署后用HTTPS访问项目,测试文件保存功能是否恢复
  2. 若选方案2:替换代码后重新构建Flutter Web项目,部署到IIS测试下载功能

内容的提问来源于stack exchange,提问作者Mehmet Hasan İLKBAHAR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 19:48:17