news 2026/9/9 18:56:31

如何使用 LocalSend 的“通过链接接收”让浏览器把文件上传到本设备

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何使用 LocalSend 的“通过链接接收”让浏览器把文件上传到本设备

如何使用 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”)。

在本设备上开启“通过链接接收”

  1. 打开 LocalSend,切换到Receive(接收)页签。

  2. 点击Receive via link按钮。对应界面代码见 receive_tab.dart。

  3. 页面会先显示 “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(自动接受请求):勾选后,浏览器发起的上传会跳过本设备的接收确认页直接接收。

在浏览器中上传文件

  1. 在浏览器所在设备的浏览器中打开上一步的链接(需与运行 LocalSend 的设备网络互通)。
  2. 打开的是 LocalSend 内置的上传页(页面源码为 upload.html),页面中央有一个Upload按钮和提示文字 “Place items to share.”。
  3. 上传有两种方式:
    • 点击Upload按钮,在文件选择框中挑选一个或多个文件;
    • 直接把文件拖拽到页面上(1.18.2+)。注意脚本中目录被明确跳过,只上传文件,不上传整个文件夹。
  4. 网页随后向本设备的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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/9 18:56:27

Unity虚拟仿真开发实战:从场景搭建到数字孪生闭环

在虚拟仿真、数字孪生、VR/AR 这些概念频繁出现在招聘要求和项目申报书的今天&#xff0c;很多开发者的第一反应是“先学 Unity”。这个判断没有错&#xff0c;但真正动手之后&#xff0c;很多人会卡在同一个地方&#xff1a;安装好了 Unity&#xff0c;打开编辑器&#xff0c;…

作者头像 李华
网站建设 2026/9/9 18:55:27

Hermes智能体记忆外挂:分层设计、接入与排障

Hermes 这类智能体框架在单轮对话里可以回答得很漂亮&#xff0c;可一旦关掉窗口&#xff0c;它就像失忆了一样。给 Hermes 装上记忆外挂&#xff0c;真正要解决的并不是把模型底座换得更大&#xff0c;而是把用户偏好、历史结论、失败记录和任务状态保存下来&#xff0c;在下次…

作者头像 李华
网站建设 2026/9/9 18:54:54

Marlin 3D 打印机固件完整指南:5 步烧录并调好你的机器

Marlin 3D 打印机固件完整指南&#xff1a;5 步烧录并调好你的机器 【免费下载链接】Marlin Marlin is a firmware for RepRap 3D printers optimized for both 8 and 32 bit microcontrollers. Marlin supports all common platforms. Many commercial 3D printers come with …

作者头像 李华
网站建设 2026/9/9 18:54:47

MySQL 8.0.27保姆级安装教程:从下载到排错,Windows环境全流程详解

很多同学在群里问我&#xff0c;MySQL到底怎么装才能不翻车。说实话&#xff0c;MySQL 8.0.27这个版本在安装上已经比早期版本人性化不少&#xff0c;但网上教程经常只讲到“下一步下一步”&#xff0c;版本还停留在5.7的老流程&#xff0c;照着做很容易踩坑。我最近正好在一台…

作者头像 李华