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

使用window.showSaveFilePicker下载时,如何在浏览器底部显示文件?

自定义下载位置同时显示浏览器下载记录的解决方案

问题的核心在于,showSaveFilePicker属于FileSystem Access API,它是直接和本地文件系统交互写入文件,不属于浏览器的标准下载流程,所以不会触发底部的下载记录——这是浏览器的设计限制。要同时实现自定义保存位置和下载栏记录,有两种可行方案:

方案一:保留自定义位置,补充下载记录触发

在用户选择位置并完成文件写入后,通过创建Blob URL并触发一次传统下载动作,强制生成下载记录(建议提前告知用户这一步是为了生成记录,避免困惑)。修改后的代码如下:

if ('showSaveFilePicker' in window) {
  window
    .showSaveFilePicker({ suggestedName: `${fileName}.mp4` })
    .then((fileHandle) => fileHandle.createWritable())
    .then(async (stream) => {
      await stream.write(blob);
      await stream.close();
      // 文件保存完成后,触发传统下载以生成记录
      const blobUrl = window.URL.createObjectURL(blob);
      const downloadLink = document.createElement('a');
      downloadLink.href = blobUrl;
      downloadLink.setAttribute('download', `${fileName}.mp4`);
      document.body.appendChild(downloadLink);
      // 可添加提示告知用户
      alert('文件已保存到您选择的位置,点击确定生成下载记录');
      downloadLink.click();
      document.body.removeChild(downloadLink);
      window.URL.revokeObjectURL(blobUrl);
    })
    .catch((err) => console.log('SaveFile aborted'));
} else {
  const blobUrl = window.URL.createObjectURL(new Blob([blob]));
  const downloadLink = document.createElement('a');
  downloadLink.href = blobUrl;
  downloadLink.setAttribute('download', `${fileName}.mp4`);
  document.body.appendChild(downloadLink);
  downloadLink.click();
  document.body.removeChild(downloadLink);
  window.URL.revokeObjectURL(blobUrl);
}

方案二:依赖浏览器设置,用传统下载实现双赢

如果用户浏览器开启了「每次下载时询问保存位置」的设置,直接使用传统的a标签下载就能同时满足:用户可选择保存位置,且浏览器底部会显示下载记录。你可以在页面上添加提示,引导用户开启该设置(通常在浏览器的下载设置中),代码保留原有的else分支逻辑即可。

补充说明

目前浏览器没有提供直接API让FileSystem Access API的操作触发下载栏记录,因为这两个功能属于不同的设计体系:前者是直接文件系统操作,后者是浏览器的下载流程管理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:25:33