---
name: publish-file-public
description: 把本地产出的文件（PDF/图片/音视频等）发布成公网可直接打开、可直接保存的固定链接，iPhone 等外地设备也能用。Use when 帆哥说"发给我""发上来""给个链接""做完发给我""让我能打开/下载"，或任何任务收尾需要交付文件时。不要只给本地路径。
---

# publish-file-public · 文件公网发布（固定域名）

> 帆哥常不在大同本机（外地、iPhone）。**凡是产出文件，必须同时给公网可直接打开/保存的链接，绝不能只给本地路径。**

## 原理

1. 常驻文件服务：计划任务 `DatongFileShare18923`（python http.server，绑 0.0.0.0:18923，根目录 `D:\tmp`）。
2. 公网出口：**Tailscale Funnel 固定域名** `https://fan-datong.taila7911d.ts.net`（2026-08-29 帆哥已授权，已 `tailscale funnel --bg 18923` 常驻）。链接永久有效、域名固定不变。

## 用法（一句话）

在**当前 pwsh 会话内**用 `&` 调用，`-Files` 传字符串数组（不要嵌套 powershell.exe -File，会把参数解析乱）：

```powershell
& "C:\Users\Administrator\.dsh\skills\publish-file-public\scripts\publish.ps1" -Files @("D:\path\成品.pdf","D:\path\图.png")
```

脚本会：复制文件到 D:\tmp → 确保 18923 服务在跑 → 用固定域名验证公网 HTTP 200 → 输出链接清单（公网 + 内网，含 VERIFIED 标记）。

直接把脚本输出的链接清单贴进回复即可。图片用 `![](url)` 内嵌，文档用 `[]()` 链接。只有 VERIFIED: True 的链接才发给帆哥。

## 交付话术模板

```
公网下载（任何网络/设备，iPhone 可打开并保存）：
[文件名](https://fan-datong.taila7911d.ts.net/编码后文件名)

内网备用（装了 Tailscale 的设备更快）：
[文件名](http://100.115.53.16:18923/编码后文件名)
```

## 注意事项

- 文件名含中文必须 percent-encode（脚本已处理，用 `[System.Uri]::EscapeDataString()`）。
- 验证时用 `Invoke-WebRequest ... -NoProxy -TimeoutSec 40`：Funnel 首次握手可能需数十秒，超时调大，别当失败。
- 本机系统代理是 127.0.0.1:7897；测内网 100.115.53.16 必须加 `-NoProxy`。
- 若 Funnel 掉了，重跑 `tailscale funnel --bg 18923`（或 `tailscale funnel status` 看状态）；域名不变，无需重建链接。
- 大文件（>100MB）Funnel 可能慢，可提示帆哥用 Tailscale 内网。
