如何使用 LocalSend 的“通过链接接收”让浏览器把文件上传到本设备
【免费下载链接】localsendAn open-source cross-platform alternative to AirDrop项目地址: https://gitcode.com/GitHub_Trending/lo/localsend
当你有一台没有安装 LocalSend 的设备(比如网吧的电脑、别人的手机、浏览器网页端),又想把文件传到自己的设备时,LocalSend 的 “Receive via link”(通过链接接收)功能可以让对方直接用浏览器把文件上传到你这边。它和 AirDrop 式的局域网设备发现不同:不需要对方装任何应用,只要两台设备能访问同一网络、浏览器能打开你给出的链接即可。
该功能从 1.18.0 版本加入(见 CHANGELOG 中 “feat: receive via link”),网页拖放上传从 1.18.2 开始支持(“feat: drag and drop files into the 'Receive via link' browser page”)。
在本设备上开启“通过链接接收”
打开 LocalSend,切换到Receive(接收)页签。
点击Receive via link按钮。对应界面代码见 receive_tab.dart。
页面会先显示 “Starting server…”,随后进入 “Receive via link” 页面(标题来自 en.json 中
webReceivePage.title)。页面顶部会列出可打开的链接,格式为:http://<本机IP>:<LocalSend端口>设备有多个网络接口时会显示多条链接(提示语为 “Open one of these links in your browser:”),每条链接旁有复制按钮;点击旁边的 QR 图标可以生成二维码,方便手机扫码打开。链接由 web_share_page.dart 根据本地 IP 与服务器端口拼接,默认使用未加密的 http。
可选设置(都在同一个页面上,按需勾选):
- Require PIN(要求 PIN):勾选后会随机生成一个 PIN 并显示 “The PIN is '...'”。之后浏览器访问上传接口时若未携带正确 PIN 会收到 401,网页会弹出输入框要求输入 PIN。
- Encryption(加密):勾选后链接变为
https://。页面提示 LocalSend 使用自签名证书,需要你在浏览器中手动接受该证书(提示语: “LocalSend uses a self-signed certificate. You need to accept it in your browser.”)。 - Automatically accept requests(自动接受请求):勾选后,浏览器发起的上传会跳过本设备的接收确认页直接接收。
在浏览器中上传文件
- 在浏览器所在设备的浏览器中打开上一步的链接(需与运行 LocalSend 的设备网络互通)。
- 打开的是 LocalSend 内置的上传页(页面源码为 upload.html),页面中央有一个Upload按钮和提示文字 “Place items to share.”。
- 上传有两种方式:
- 点击Upload按钮,在文件选择框中挑选一个或多个文件;
- 直接把文件拖拽到页面上(1.18.2+)。注意脚本中目录被明确跳过,只上传文件,不上传整个文件夹。
- 网页随后向本设备的
POST /api/localsend/v2/prepare-upload发起请求(携带?pin=参数,如果设置了 PIN),被接受后逐个向POST /api/localsend/v2/upload上传,页面以 “x/y file(s)” 形式显示进度。
如果本设备没有勾选自动接受,上传请求会先停在你的 LocalSend 界面上:接收页列出发送方(显示为 “Web Browser”)和文件列表,你需要点击接受后浏览器侧才开始实际传输;拒绝则浏览器收到 403 并显示 “uploadRejected” 对应的提示。
结果验证
- 浏览器侧:上传页显示 “已完成数/总数 file(s)” 的进度,全部完成后按钮重新可用,可以再次上传。
- 本设备侧:文件接收后出现在你设置的保存目录中(接收设置里的 “Save to folder”,默认是 Downloads;逻辑见 receive_controller.dart 中
settings.destination ?? await getDefaultDestinationDirectory()),并会写入接收历史。
常见状态码对应的现象
upload.html 中对服务端返回的处理说明了浏览器侧可能看到的情况:
| HTTP 状态 | 浏览器页面上的表现 | 含义 |
|---|---|---|
| 401 | 弹出 PIN 输入框,提示输入(再次失败会附加 “invalidPin” 提示) | PIN 缺失或错误 |
| 429 | 显示 “tooManyAttempts” | PIN 尝试次数过多被限流 |
| 403 | 显示 “uploadRejected” | 本设备拒绝了这次上传 |
| 409 | 显示 “busy” | 本设备已有上传会话在进行 |
| 204 | 显示 “uploadRejected” | 接收方接受了请求但拒收了全部文件 |
| 0 | 显示 “Error”(无状态码) | 连接中断或被接收方取消 |
使用限制与收尾
- 链接只在你停留在 “Receive via link” 页面期间有效:该页面离开时会自动停止 web 分享服务器并恢复 LocalSend 原本的服务器状态(见 web_share_page.dart 中
_revertServerState),所以上传完成后记得回到正常界面。 - 默认是 http 明文传输,跨网络共享敏感文件时建议勾选加密并接受自签名证书,或至少设置 PIN。
- 浏览器上传页只支持文件(拖放目录会被跳过);若需要传整个文件夹,建议改用 LocalSend 设备间的常规传输。
【免费下载链接】localsendAn open-source cross-platform alternative to AirDrop项目地址: https://gitcode.com/GitHub_Trending/lo/localsend
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考