# 下载触发器

- 页面: https://jiguang132.com/zh/resources/chakra-ui/docs/download-trigger
- 资源: Chakra UI (https://jiguang132.com/zh/resources/chakra-ui.md)
- 全部指南: https://jiguang132.com/zh/resources/chakra-ui/docs.md

在用户操作后生成文件下载。MIME、扩展名和实际内容必须一致；异步内容生成、预览就绪和文件实际保存是不同结果，隔离预览的权限限制见专属指南。

## 随附图标许可

源码查看器包含 ICON_ATTRIBUTION.md，以及本组示例实际使用的图标集合原始许可。再分发示例时请保留；react-icons 封装包的许可证不能替代各图标集合自身的条款。

- Lucide: ISC

通过用户操作生成文件下载。它不是文件上传控件，也不是后端文件存储服务。此页针对 Chakra UI 3.37.0。

## 安装与使用

完成 setup.zh.md，从 `@chakra-ui/react` 导入 `DownloadTrigger`。向 `data` 提供待下载内容，用 `fileName` 指定文件名，用 `mimeType` 指定实际类型。异步 data 可以返回 Blob、File 或字符串。需要按钮外观时使用原生 `asChild` 与 Chakra Button 组合，避免嵌套两个 button。

最小的本地文本下载：

```tsx
import { Button, DownloadTrigger } from "@chakra-ui/react"

export function Example() {
  return (
    <DownloadTrigger data="JGuang demo" fileName="demo.txt" mimeType="text/plain" asChild>
      <Button>下载文本</Button>
    </DownloadTrigger>
  )
}
```

本地清单保留基础、SVG、Promise、文件大小共 4 个原生示例；文件大小展示使用原生 FormatByte。文件扩展名和 MIME 必须与内容一致，不能仅修改名称假装完成格式转换。

## 预览限制与真实失败

`download-trigger-with-promise` 原始 data 函数使用 fetch 请求公开图片。JGuang 的 connect-src 策略会阻止它；按钮点击后允许展示真实失败，并可重试预览。重试不会解除限制，也不能将预览重新就绪说成文件下载成功。

另外，隔离 iframe 的 sandbox 未授予 allow-downloads，即使是本地 data 示例，浏览器也可能拒绝实际保存文件。这是展示环境限制，不是组件没有下载能力。要验证保存结果，应在自己的顶层应用页面点击，检查实际文件内容、文件名和类型；不要为了演示而全局关闭浏览器安全保护。

生产异步下载需要权限检查、HTTP 状态验证、超时/取消、失败提示和重复点击管理。Blob 生成成功不保证浏览器已保存到磁盘，网站不应声称能够读取用户实际保存位置。不要自动触发下载。

## 可访问性与来源

为按钮提供可理解的动作名称，保留键盘激活和焦点。在深浅色与窄屏检查长文件名是否溢出。

原始示例和 MDX 固定在提交 `2e7517745cff2fcde0b8012f136cf99611ff262a`，保存在 vendor；此页为 JGuang 编写。原始 Download Trigger MDX 的 Props 区引用了 Button 表，不应将它误当成完整下载 API；以固定版本类型声明和原生源码为准。


## 安装与初始化

```bash
npm install @chakra-ui/react@3.37.0 @emotion/react@11.14.0
```

渲染前配置 ChakraProvider、defaultSystem 和 Emotion。保留宿主项目的 React 版本并检查 peer 兼容。官方 npm 安装提供组件包，不会复制以下示例源码。locale、next-themes 和框架专属 SSR 配置见资源安装指南；npm 安装之外还需单独复制所选示例源码。

## 完整原生使用示例

这是固定版本的真实示例，不是通用 API 伪代码。复制完整源码依赖并保留命名导出；附加依赖逐例列在下方。

```tsx
import { Button, DownloadTrigger } from "@chakra-ui/react"

const data = "The quick brown fox jumps over the lazy dog"

export const DownloadTriggerBasic = () => {
  return (
    <DownloadTrigger
      data={data}
      fileName="sample.txt"
      mimeType="text/plain"
      asChild
    >
      <Button variant="outline">Download txt</Button>
    </DownloadTrigger>
  )
}
```

## 全部示例与复现要求

示例名称用于选择演示，不是组件通用 variant 属性。复制所选示例全部 sourceFiles；compositions 别名表示本地文件，不是 npm 包。保留相对导入或映射到宿主真实目录。React peer 单独检查；编辑器示例保留一致的固定 Tiptap 扩展版本。

### 基础用法

`download-trigger-basic` · 命名导出 `DownloadTriggerBasic` · 上游原始示例

```bash
npm install @chakra-ui/react@3.37.0 @emotion/react@11.14.0
```

- `vendor/apps/compositions/src/examples/download-trigger-basic.tsx`

### SVG

`download-trigger-svg` · 命名导出 `DownloadTriggerSvg` · 上游原始示例

```bash
npm install @chakra-ui/react@3.37.0 @emotion/react@11.14.0
```

- `vendor/apps/compositions/src/examples/download-trigger-svg.tsx`

### 异步文件内容

`download-trigger-with-promise` · 命名导出 `DownloadTriggerWithPromise` · 上游原始示例

```bash
npm install @chakra-ui/react@3.37.0 @emotion/react@11.14.0 react-icons@5.6.0
```

- `vendor/apps/compositions/src/examples/download-trigger-with-promise.tsx`

### 文件尺寸

`download-trigger-with-file-size` · 命名导出 `DownloadTriggerWithFileSize` · 上游原始示例

```bash
npm install @chakra-ui/react@3.37.0 @emotion/react@11.14.0 react-icons@5.6.0
```

- `vendor/apps/compositions/src/examples/download-trigger-with-file-size.tsx`

## 原生 API 与源码参考

源码查看器保留原始声明、import 与继承关系。Ark UI 事件契约、Chakra 样式属性和 recipe 类型仍以原生包为准；本指南不平铺或编造默认值。代码注释保留原文，不冒充正文翻译。

- `npm/@chakra-ui/react@3.37.0/dist/types/components/download-trigger/index.d.ts`

## 状态与安装后检查

执行严格类型检查、目标项目生产构建和实际操作。检查名称／焦点／键盘、深浅色、窄屏、原生支持的空／加载／错误状态以及卸载清理。预览限制远程接口、上传与下载，业务服务需自行配置。复制命令或预览就绪不代表安装完成或后端成功。

## 来源与许可边界

https://github.com/chakra-ui/chakra-ui/tree/2e7517745cff2fcde0b8012f136cf99611ff262a

本页是 JGuang 双语实用说明，不声称全文翻译上游 MDX。原始文档与示例字节保留在 vendor。保留仓库 MIT、compositions 的 ISC 元数据和独立依赖声明；原始许可元数据差异与缺失完整声明仍作为显式审查事项，不包含 Chakra Pro 付费内容。

---

JGuang 全部资源索引: https://jiguang132.com/llms.txt
