科学工具
科学工具让世界更美好
让世界更美好

Python开发的文件传输工具 copyparty,通过浏览器即可完成文件浏览、上传、下载、在线播放等操作

copyparty是一款轻量级文件服务器工具,只需Python环境(支持Python 2和3)就能运行,所有依赖均为可选,能把几乎任何设备变成文件服务器,支持通过网页浏览器进行可断点续传的上传和下载操作。

支持多种协议,包括http、webdav、ftp、tftp、smb/cifs,支持安卓应用和iPhone快捷指令,方便移动设备使用。

最简单的方式是运行copyparty-sfx.py,一步到位。

可以通过以下方式安装使用:

• PyPI:python3 -m pip install --user -U copyparty

• 对于无法安装Python的情况,可使用copyparty.exe

• Arch Linux:直接通过包管理器安装

• NixOS:通过nix安装

• 安卓设备:在termux中安装

• 若使用uv,可运行uv tool run copyparty

• 系统出现问题时,可尝试pyz版本

• 还能制作成可启动的U盘或光盘

• 如需隔离运行,可使用prisonparty创建小型chroot环境,或用bubbleparty借助bubblewrap包装,也支持docker

启用缩略图(图片/音频/视频)、媒体索引和音频转码功能,需安装一些推荐依赖,不同系统安装命令不同:

• Alpine:apk add py3-pillow ffmpeg

• Debian:apt install --no-install-recommends python3-pil ffmpeg

• Fedora:rpmfusion + dnf install python3-pillow ffmpeg --allowerasing

• FreeBSD:pkg install py39-sqlite3 py39-pillow ffmpeg

• MacOS:port install py-Pillow ffmpegbrew install pillow ffmpeg

• Windows:python -m pip install --user -U Pillow(需手动安装python和ffmpeg,不建议使用winget或Microsoft Store,可能导致$PATH出问题)

copyparty.exe已包含Pillow,仅需ffmpeg处理媒体标签和视频缩略图。

无参数运行copyparty(比如在Windows上双击),会允许所有人对当前文件夹进行读写操作,也可设置账户和卷来限制访问。

一些推荐选项:

-e2dsa:启用通用文件索引

-e2ts:启用音频元数据索引(需要FFprobe或Mutagen)

-v /mnt/music:/music:r:rw,foo -a foo:bar:将/mnt/music以/music共享,任何人可读取,用户foo可读写,密码为bar

• 若要仅让foo用户读取,其他人无法访问,可将:r:rw,foo替换为:r,foo

在家使用

想让copyparty能通过互联网访问,可启动cloudflare快速隧道,用cloudflared tunnel --url http://127.0.0.1:3923启动隧道,隧道启动后会显示一个URL,通过该URL可让他人访问你的文件或向你上传文件。

若有域名,可搭建永久的cloudflare隧道,避免使用随机生成的URL。

由于用户会通过cloudflare连接,运行copyparty时需加上--xff-hdr cf-connecting-ip,以正确检测客户端IP。

在服务器上使用

服务器上使用copyparty,可考虑以下工具:

• contrib/systemd/copyparty.service:将copyparty作为systemd服务运行(内有指南)

• contrib/systemd/prisonparty.service:在chroot中运行,提高安全性

• contrib/openrc/copyparty:在Alpine/Gentoo上运行

• contrib/rc/copyparty:在FreeBSD上运行

• nixos模块:在NixOS主机上运行

• contrib/nginx/copyparty.conf:在nginx后反向代理,获得更好的https支持

需开放所需端口,完整示例如下: (69:tftp,1900:ssdp,3921:ftp,3923:http/https,3945:smb,3969:tftp,3990:ftps,5353:mdns,12000:passive-ftp)

firewall-cmd --permanent --add-port={80,443,3921,3923,3945,3990}/tcp  # --zone=libvirt
firewall-cmd --permanent --add-port=12000-12099/tcp  # --zone=libvirt
firewall-cmd --permanent --add-port={69,1900,3969,5353}/udp  # --zone=libvirt
firewall-cmd --reload

copyparty后端功能

• 支持IPv6和unix-sockets

• 多进程(真正的多线程)

• 卷(挂载点)和账户管理

• 内置ftp、tftp、webdav、smb/cifs服务器

• 提供二维码,方便快速访问

• 支持upnp/zeroconf/mdns/ssdp

• 事件钩子/脚本运行器

• 支持反向代理

• 跨平台(Windows、Linux、Macos、Android、FreeBSD、arm32/arm64、ppc64le、s390x、riscv/riscv64)

copyparty上传功能

• 基础功能:普通多部分上传,支持ie6

• up2k:基于js,支持断点续传、多线程,无文件大小限制,即使在Cloudflare上也能使用

• stash:简单的PUT文件上传器

• 文件名随机化

• 只写文件夹

• unpost:撤销/删除意外上传的文件

• 自毁功能:可设置上传文件的生命周期(服务器端或客户端指定)

• race the beam:文件还在上传时就能下载(类似点对点传输)

• 支持符号链接/丢弃重复文件(基于内容匹配)

copyparty下载功能

• 浏览器中下载单个文件

• 文件夹可打包为zip或tar文件下载

• FUSE客户端(只读)

copyparty浏览器功能

• 导航面板(目录树侧边栏)

• 文件管理器(剪切/粘贴、删除、批量重命名)

• 音频播放器(支持系统媒体控制和opus/mp3转码)

• 可将视频文件当作音频播放(在服务器上转换)

• 创建和播放m3u8播放列表

• 带webm播放器的图片库

• 带语法高亮的文本文件浏览器

• 实时流式传输增长中的文件(如日志文件)

• 缩略图:

• 图片:使用Pillow、pyvips或FFmpeg生成 • 视频:使用FFmpeg生成 • 音频:使用FFmpeg生成频谱图

• 缓存淘汰(最大老化时间;最终可能会有最大大小限制)

• 国际化界面(英语、挪威语、中文等,可自行添加)

• 单页应用(上传时可同时浏览)

copyparty服务器索引

• 按内容定位文件

• 按名称/路径/日期/大小搜索

• 按ID3标签等搜索

copyparty客户端支持

• 文件夹同步(仅单向;不支持完全同步)

• 支持curl

• opengraph(discord嵌入)