QnShare - 七牛云文件共享工具
一个简单易用的七牛云存储命令行工具,支持文件上传、下载、管理等功能。
特性
- 🚀 现代化的命令行界面
- 🔒 安全的配置管理(配置文件存储在用户目录)
- 📁 支持文件上传、下载、删除等操作
- 🌐 支持离线下载网络文件
- 🔄 支持CDN刷新
- 🔗 支持生成下载链接和防盗链
- 📦 可作为uv tool安装
安装
使用 uv(推荐)
# 作为工具安装
uv tool install qnshare
# 或者从本地安装
uv tool install .
使用 pip
pip install qnshare
快速开始
1. 初始化配置
首次使用需要配置七牛云的Access Key和Secret Key:
qnshare init
按提示输入您的七牛云密钥信息。配置文件将安全地存储在 ~/.qn/config.json。
2. 基本使用
# 列出云端文件
qnshare list
# 上传文件
qnshare upload file1.txt file2.jpg
# 上传整个目录(递归,保留相对结构)
qnshare upload photos
# 下载文件
qnshare download file1.txt
# 离线下载网络文件
qnshare fetch https://example.com/file.zip
# 删除文件
qnshare delete file1.txt
# 刷新CDN
qnshare refresh file1.txt
# 获取下载链接
qnshare link file1.txt
# 获取防盗链(带时间戳,会自动生成加密密钥)
qnshare link file1.txt --timestamp
# 手动设置防盗链加密密钥(可选)
qnshare config --set-encrypt-key
# 重新生成随机加密密钥(可选)
qnshare config --generate-encrypt-key
# 配置存储空间和域名(可选)
qnshare config --list-buckets # 列出可用存储空间
qnshare config --set-bucket my-bucket # 设置存储空间
qnshare config --list-domains my-bucket # 列出域名
qnshare config --set-domain my.domain.com # 设置域名
# 启动交互式模式(类似原版体验)
qnshare interactive
# 或使用简写
qnshare -i
命令详解
qnshare init
初始化配置,设置七牛云的Access Key、Secret Key等信息。
qnshare config [OPTIONS]
显示或修改当前配置(敏感信息会被隐藏)。
选项:
--set-encrypt-key: 设置防盗链加密密钥--generate-encrypt-key: 生成新的随机加密密钥--set-bucket <name>: 设置存储空间名称--set-domain <domain>: 设置绑定域名--list-buckets: 列出可用的存储空间--list-domains <bucket>: 列出指定存储空间的绑定域名
qnshare list [--prefix PREFIX]
列出云端文件,可选择指定前缀过滤。
qnshare upload PATHS... [--delete-after DAYS] [--recursive/--no-recursive] [--hidden/--no-hidden] [--overwrite/--skip-existing] [--force] [--refresh]
上传一个或多个本地文件或目录,可设置自动删除时间。
- 目录默认递归上传,并保留相对目录结构:
qnshare upload photos会把photos/2024/b.jpg传成<prefix>photos/2024/b.jpg。 - 单个文件参数保持原行为,远端为
<prefix><文件名>。 - 隐藏文件(
.开头)默认跳过,--hidden可包含。 - 云端已存在同名文件时默认覆盖;
--skip-existing改为跳过;--force先删除再上传(用于重置元数据/生命周期)。 --refresh在上传完成后刷新这些文件的CDN缓存(自动按100个一批提交)。
# 上传整个目录(含子目录,保留结构)
qnshare upload photos
# 只传目录第一层,跳过隐藏文件
qnshare upload photos --no-recursive
# 当前目录全量同步:含隐藏文件、先删后传、并刷新CDN
qnshare upload . --hidden --force --refresh
# 云端已有同名文件时跳过,不覆盖
qnshare upload photos --skip-existing
只要有文件上传失败,命令退出码即为 1(空目录、跳过隐藏文件、CDN刷新失败都不算失败)。
qnshare download FILENAME [--output OUTPUT]
下载云端文件到本地,可指定输出文件名。
qnshare fetch URL [--name NAME] [--delete-after DAYS] [--no-download]
离线下载网络文件到云端,默认同时下载到本地。
qnshare delete FILENAME
删除云端文件(需要确认)。
qnshare refresh FILENAME
刷新文件的CDN缓存。
qnshare link FILENAME [--timestamp]
获取文件下载链接,可选择生成带时间戳的防盗链。
qnshare interactive 或 qnshare -i
启动交互式模式,提供类似原版qn.py的命令行体验。
在交互式模式中可用的命令:
l或list- 列出文件p或upload- 上传文件或目录(不带参数时弹出文件选择对话框)g <filename>或download <filename>- 下载文件s <url>或fetch <url>- 离线下载d <filename>或delete <filename>- 删除文件r <filename>或refresh <filename>- 刷新CDNlink <filename>- 获取文件链接config- 显示配置信息help- 显示帮助exit或q- 退出
配置文件
配置文件位于 ~/.qn/config.json,包含以下字段:
{
"access_key": "your_access_key",
"secret_key": "your_secret_key",
"encrypt_key": "your_encrypt_key",
"prefix": "share/",
"dead_time": 3600,
"bucket_name": null,
"domain": null
}
access_key: 七牛云Access Key(必需)secret_key: 七牛云Secret Key(必需)encrypt_key: 防盗链加密密钥(可选,留空时会在需要时自动生成)prefix: 文件前缀,默认为 "share/"dead_time: 防盗链有效期(秒),默认3600秒bucket_name: 存储空间名称(可手动设置,留空则自动获取第一个)domain: 绑定域名(可手动设置,留空则自动获取第一个)
编程接口
除了命令行工具,您也可以在Python代码中使用:
from qnshare import QiniuClient, init_config
# 初始化配置(仅需一次)
init_config(
access_key="your_access_key",
secret_key="your_secret_key"
)
# 创建客户端
client = QiniuClient()
# 上传文件
remote_name = client.upload_local_file("local_file.txt")
# 获取下载链接
download_url = client.get_download_link(remote_name)
# 列出文件
files = client.get_file_list()
迁移指南
如果您之前使用的是旧版本的qn.py,请注意:
- 配置方式变更:不再使用硬编码的密钥,需要运行
qnshare init进行配置 - 命令行界面:新的CLI命令替代了原有的交互式shell
- API变更:建议使用新的
QiniuClient类替代旧的Qiniu类
旧的接口仍然可用但已标记为弃用,建议尽快迁移到新接口。
安全注意事项
- 配置文件会自动设置适当的权限(仅用户可读写)
- 不要在代码中硬编码密钥信息
- 定期检查和更新您的七牛云密钥
许可证
MIT License
贡献
欢迎提交Issue和Pull Request!
Metadata
Release files for qnshare 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| qnshare-0.1.1.tar.gz | 21.2 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| qnshare-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 48.5 kB
Security for qnshare 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.