js 实现将后端请求来的 Blob 数据保存到用户选择的任意目录

js实现将后端请求来的 Blob 数据保存到用户选择的任意目录

实现方式

实现方式是使用 window 的 showSaveFilePicker 方法。Window 接口的 showSaveFilePicker() 方法用于显示一个文件选择器,以允许用户保存一个文件。可以选择一个已有文件覆盖保存,也可以输入名字新建一个文件。

具体示例如下:

使用 fetch 或者 axios 从后端获取 Blob 数据。

使用 showSaveFilePicker 让用户选择保存文件的位置。

将 Blob 数据写入用户选择的文件。

以下是一个完整的示例代码:

html 复制代码
<!DOCTYPE html>
<html>

<head>
  <title>js实现将后端请求来的 Blob 数据保存到用户选择的任意目录</title>
</head>

<body>
  <h2>js实现将后端请求来的 Blob 数据保存到用户选择的任意目录</h2>

  <button onclick="saveBlobFromServer()">保存文件</button>

  <script>
    async function saveBlobFromServer() {
      try {
        // 1: 从后端获取 Blob 数据,这里就直接模拟一个 Blob 数据
        const obj = { hello: "world" };
        const blob = new Blob([JSON.stringify(obj, null, 2)], {
          type: "application/json",
        });

        // 2: 显示文件保存选择器。这段代码显示文件保存对话框,允许用户选择保存文件的位置和名称。
        const opts = {
          suggestedName: 'downloaded-file',
          types: [
            {
              // 建议的文件名
              description: "文件",
              // 允许选择的文件类型的数组
              accept: {
                "text/plain": [".txt"],
                "application/pdf": [".pdf"],
                "image/jpeg": [".jpg", ".jpeg"],
                "image/png": [".png"],
              },
            },
          ],
          excludeAcceptAllOption: true,
        };

        const fileHandle = await window.showSaveFilePicker(opts);

        // 3: 创建一个可写流,并将 Blob 数据写入用户选择的文件中。
        const writableStream = await fileHandle.createWritable();
        await writableStream.write(blob);
        await writableStream.close();

        console.log('文件保存成功');
      } catch (error) {
        console.error('文件保存失败:', error);
      }
    }
  </script>
</body>

</html>
  • 注意
    showSaveFilePicker 是一个实验性 API,可能并不在所有浏览器中都可用。请确保在支持的环境中使用。
    你可能需要在 HTTPS 环境下运行此代码,因为许多现代浏览器要求文件系统 API 在安全上下文中使用。
相关推荐
skywalk816312 小时前
g4f JavaScript调用报错问题解决
开发语言·javascript·ecmascript
Alice-YUE12 小时前
AI对话为什么需要RAG
前端·语言模型·rag
C澒12 小时前
IntelliPro 企业级产研协作平台:低代码实时预览与可视化编辑技术调研
前端·低代码·ai编程
霍理迪12 小时前
TS类型断言和类型守卫
前端
qqty121712 小时前
基于python语言的网页设计(手把手教你设计一个个人博客网站)
开发语言·python
木斯佳12 小时前
前端八股文面经大全:京东前端实习一面(2026-04-16)·面经深度解析
前端
耿雨飞12 小时前
Python 后端开发技术博客专栏 | 第 02 篇 函数式编程与 Python 魔法 -- 闭包、装饰器、高阶函数
开发语言·python·装饰器·高阶函数·闭包
chenxu98b12 小时前
前端的dist包放到后端springboot项目下一起打包
前端·spring boot·后端
网域小星球12 小时前
C++ 从 0 入门(五)|C++ 面试必知:静态成员、友元、const 成员(高频考点)
开发语言·c++·面试·静态成员·友元函数
|_⊙12 小时前
C++11 右值引用
开发语言·c++