logo
0
0
WeChat Login

图片压缩与云存储服务

这是一个集成了 TinyPNG 图片压缩服务、七牛云存储和 Cloudflare R2 存储的 Web 应用。该应用提供了一个便捷的图片压缩和云存储解决方案。

功能特性

  • 使用 TinyPNG API 进行图片压缩
  • 支持 WebP 格式(可选)
  • 集成七牛云存储服务
  • 集成 Cloudflare R2 对象存储
  • 提供 RESTful API 接口
  • 简洁的 Web 界面

部署方式

方法一:使用 Docker Compose(推荐)

version: '3.8' services: app: image: docker.cnb.cool/abigmiu/web_upload ports: - "3012:8080" volumes: - type: bind source: /www/1panel/docker/compose/webupload/config.json target: /root/config.json environment: - GIN_MODE=release restart: unless-stopped networks: 1panel-network: external: true

方法二:直接运行

  1. 确保已安装 Go 1.21 或更高版本

  2. 克隆项目并进入目录:

    git clone <your-repo-url> cd <project-directory>
  3. 安装依赖:

    go mod download
  4. 编译项目:

    go build -o main .
  5. 运行应用:

    ./main
  6. 应用将在 http://localhost:8080 上运行

方法三:使用 Docker

  1. 构建 Docker 镜像:

    docker build -t image-optimizer .
  2. 运行容器(需要先配置好 config.json):

    docker run -d -p 8080:8080 -v $(pwd)/config.json:/home/appuser/config.json:ro --name image-optimizer image-optimizer

config.json 配置项说明

config.json 是应用的配置文件,包含多个配置部分:

TinyPNG 配置

  • tinypng.api_key:TinyPNG API 密钥

    • 用途:用于访问 TinyPNG 的图片压缩服务
    • 获取方式:访问 TinyPNG 开发者页面 注册并获取 API 密钥
    • 格式:字符串,例如 "your_api_key_here"
  • tinypng.allow_webp:是否允许输出 WebP 格式

    • 用途:设置是否将压缩后的图片转换为 WebP 格式
    • 可选值:truefalse
    • 默认值:false
    • 说明:WebP 格式通常比 JPEG/PNG 更小,但并非所有浏览器都支持

七牛云配置

  • qiniu.access_key:七牛云 Access Key

    • 用途:用于验证您的七牛云账户身份
    • 获取方式:登录七牛云控制台,在个人面板中获取 Access Key
    • 格式:字符串
  • qiniu.secret_key:七牛云 Secret Key

    • 用途:用于签名请求的密钥,需要妥善保管
    • 获取方式:登录七牛云控制台,在个人面板中获取 Secret Key
    • 格式:字符串
    • 安全提示:请确保此密钥不被泄露
  • qiniu.bucket:七牛云存储空间名称

    • 用途:指定文件上传的目标存储空间
    • 获取方式:在七牛云控制台创建存储空间后获取名称
    • 格式:字符串
  • qiniu.region:七牛云存储区域

    • 用途:指定存储空间所在的数据中心区域
    • 常见值:"z0" (华东), "z1" (华北), "z2" (华南), "na0" (北美), "as0" (东南亚)
    • 格式:字符串
  • qiniu.preview_domain:预览域名

    • 用途:用于访问存储文件的自定义域名
    • 格式:字符串,可以为空
    • 说明:如果留空,将使用七牛云的默认域名

Cloudflare R2 配置

  • r2.account_id:Cloudflare 账户 ID

    • 用途:用于拼接默认 R2 S3 兼容 endpoint
    • 格式:字符串
  • r2.access_key:R2 Access Key

    • 用途:用于上传鉴权
    • 格式:字符串
  • r2.secret_key:R2 Secret Key

    • 用途:用于请求签名,需要妥善保管
    • 格式:字符串
  • r2.bucket:R2 Bucket 名称

    • 用途:指定上传目标存储桶
    • 格式:字符串
  • r2.endpoint:R2 S3 兼容 endpoint(可选)

    • 用途:覆盖默认 endpoint(默认值:https://<account_id>.r2.cloudflarestorage.com
    • 格式:字符串,可为空
  • r2.preview_domain:R2 预览域名(可选)

    • 用途:用于返回访问 URL;若为空则回退到 endpoint + bucket
    • 格式:字符串,可为空

API 接口

应用提供以下 API 接口:

配置管理

  • GET /api/config/tinypng - 获取 TinyPNG 配置
  • POST /api/config/tinypng - 更新 TinyPNG 配置
  • GET /api/config/qiniu - 获取七牛云配置
  • POST /api/config/qiniu - 更新七牛云配置
  • GET /api/config/r2 - 获取 Cloudflare R2 配置
  • POST /api/config/r2 - 更新 Cloudflare R2 配置

TinyPNG 服务

  • POST /api/tinypng/compress - 上传并压缩图片
  • POST /api/tinypng/compress-from-url - 从 URL 压缩图片
  • GET /api/tinypng/usage - 获取 TinyPNG 使用量
  • POST /api/tinypng/compress-to-s3 - 压缩并保存到 S3 存储

七牛云服务

  • GET /api/qiniu/upload-token - 获取上传令牌
  • POST /api/qiniu/upload - 上传文件到七牛云

统一上传服务

  • POST /api/upload?provider=qiniu - 上传文件到七牛云
  • POST /api/upload?provider=r2 - 上传文件到 Cloudflare R2
  • GET /api/upload-token?provider=qiniu - 获取七牛云上传令牌

其他

  • GET /health - 健康检查接口
  • / - Web 界面

安全注意事项

  1. 请妥善保管您的 API 密钥,不要将其提交到版本控制系统
  2. 建议使用环境变量或安全的密钥管理服务来存储敏感信息
  3. 定期更换 API 密钥以提高安全性

开发

云端开发 https://cnb.cool/abigmiu/web_upload 直接fork 云原生开发, 环境已配置完成 本地开发

  1. 安装 Go 1.21+
  2. 克隆仓库
  3. 运行 go mod download 安装依赖
  4. 运行 go run main.go 启动开发服务器

许可证

请在相应位置添加许可证信息。

About

基于 go 的web 上传,通过 tingpng 压缩图片,目前支持七牛云

Language
Go61.4%
HTML37.7%
Dockerfile0.9%