>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
JavaScript

一键上传文件到上百个网盘,无需中间人

你可能曾需要将大型压缩包、软件安装包或视频分享到多个网盘。手动通过浏览器标签页操作简直是折磨。先等一个服务上传完成,复制链接,打开第二个,遇到验证码,以此类推,循环往复。

通常在这种情况下,人们会转向 Mirrored.to 或 MultiUp 这类网页多平台上传工具。但它们也有自己的问题:免费用户有严格的文件大小限制,一半功能需要注册,广告烦人,最重要的是——你的文件首先会飞到别人的中间服务器。

PolyUploader banner

最近偶然发现了一个有趣的项目——PolyUploader。这是一款开源桌面应用,可以从你的磁盘中选取文件(或通过直链下载),直接从你的电脑同时推送到选定的网盘。

PolyUploader 能做什么

程序的主要功能很简单:选择文件,勾选想要的服务商,然后开始上传。支持的主机列表令人印象深刻——仓库表格中有 133 个。其中包括 Gofile、1fichier、Turbobit、Catbox 和 Pixeldrain 等热门服务,也有 DoodStream、StreamWish 或 Voe 等专业视频托管平台。

PolyUploader showcase

以下是作者内置在架构中的几个实用功能:

  • 无需账号即可上传。133 个主机中,有 96 个支持完全匿名模式。无需注册或登录,按下按钮——拿到链接。
  • 连接你自己的 API 密钥。如果你有 1fichier、KrakenFiles 或 Nitroflare 的高级账户或个人账户,可以在设置中输入密钥。这样上传就会进入你的个人账户,使用你自己的限额。
  • 链接保护和打包。上传完成后,应用会将收到的链接收集到一个列表中。你可以将其打包成一个简洁的链接,或通过 PrivateBin、Cryptgeon、SafeLinking 或 Filecrypt 进行加密。
  • 上传配置文件。为了避免每次都要点击几十个复选框,主机组合可以保存为独立的预设,用于不同的任务。
  • 本地历史记录。PolyUploader 会记住文件上传的时间和地点,显示链接的大致过期时间,并在主机支持的情况下提供快速删除按钮。
界面截图 single_upload multiple_upload history api_keys profiles settings_windows_context_menu

底层原理

该项目基于 Tauri 构建。用户界面使用标准 Web 技术栈和 Tailwind CSS,而系统逻辑、网络请求和文件操作则在 Rust 后端运行。

正因如此,与基于 Electron 的替代方案相比,这款应用更加轻量,内存占用也更低。

这里最有趣的工程解决方案与浏览器引擎的限制有关。当 Web 界面直接向一百个外部站点发送请求时,会立即遇到 CORS 错误和跨站 Cookie 问题。

作者优雅地解决了这个问题。Rust 后端中嵌入了一个基于 warp-cors 库的本地 HTTP 代理。应用启动时,一个轻量级服务器会在 61337 端口上启动。

// Запуск прокси warp-cors в фоновом рантайме
use tokio::runtime::Builder;
use warp_cors::app::{Config, run};

fn main() {
  std::thread::spawn(|| {
      let rt = Builder::new_multi_thread()
          .enable_all()
          .build()
          .unwrap();
      let cfg = Config { host: "127.0.0.1".into(), port: 61337 };
      rt.block_on(run(cfg));
  });
}

前端只需通过本地地址发送请求:

const proxy = "http://127.0.0.1:61337/";
upload_to_host([
  proxy + "https://upload.gofile.io/uploadfile/",
  "POST",
  sent_data_form
]);

代理将流量转发到目标站点,替换必要的头部,然后将响应返回给界面。无需与浏览器安全策略周旋。

硬币的另一面

作者在 README 中坦诚承认,他是在学习之余的空闲时间独自开发这个项目的。而维护一百多个主机的正常运行是一项艰巨的工作。

许多网站没有官方 API。要向它们上传文件,必须模拟浏览器行为、解析表单脚本,并将 cURL 请求转换为代码。一旦服务更改了界面或防护措施,上传就会中断,直到下次修复。

此外,应用目前无法处理排队的不同本地文件的批量处理。你只能选取一个特定文件,然后将其复制到数十个镜像。

该项目包含匿名遥测。应用只向作者的服务器发送主机名和上传日期用于汇总统计,不包含文件路径或最终链接。如果你从根本上反对软件产生网络活动,API 代码也在 GitHub 上开源,所以你可以轻松自行验证逻辑。

如何体验

最简单的方法是查看仓库的 Releases 部分。那里有预构建的安装包:Windows(安装程序)、Linux(AppImage、deb、rpm 包)和 macOS(dmg 镜像)。

如果你想自己构建二进制文件,需要安装 Rust 和 Tauri CLI:

git clone https://github.com/spel987/PolyUploader.git
cd PolyUploader
cargo install tauri-cli
cargo tauri build

构建完成后,安装程序会出现在 src-tauri/target/release/bundle 目录中。

适用人群

这个项目适合那些经常上传软件发布包、数据转储、媒体文件或备份,并希望获得可靠镜像以防主存储宕机的人。

PolyUploader 消除了将数据信任给第三方网页镜像的需要,并节省了大量日常时间。如果你对这个项目感兴趣,请在 GitHub 上给作者一个 star——独自维护如此庞大的主机库确实需要极大的耐心。

相关项目