# nbuu **Repository Path**: jongates/pic ## Basic Information - **Project Name**: nbuu - **Description**: 图床 - **Primary Language**: 其他 - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-08-20 - **Last Updated**: 2026-01-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Go Upload Server 一个基于 Go 语言开发的高性能文件上传服务器,支持图片上传、缩略图生成、文件下载等功能。 ## 功能特性 ### 🚀 核心功能 - **文件上传**: 支持多文件上传,自动生成 MD5 哈希值 - **图片处理**: 自动生成缩略图,支持多种尺寸规格 - **文件下载**: 支持原图和缩略图下载 - **格式支持**: 支持 JPEG、PNG、GIF、BMP 等主流图片格式 - **GIF 动图**: 专门优化的 GIF 动图缩放处理 ### 🔧 技术特性 - **高并发**: 基于 Go 原生 HTTP 服务器,支持高并发访问 - **连接限制**: 内置连接数限制,防止服务器过载 - **Redis 缓存**: 可选的 Redis 支持,提升性能 - **HTTPS 支持**: 支持 TLS/SSL 加密传输 - **文件去重**: 基于 MD5 的文件去重机制 ### 📁 存储特性 - **智能目录**: 基于 MD5 值的分层目录结构 (`/aa/bb/cc/filename.ext`) - **缩略图管理**: 独立的缩略图存储目录 - **文件索引**: Redis 存储文件索引和元数据 ## 项目结构 ``` ├── main.go # 主程序入口 ├── upload.conf # 配置文件 ├── libs/ # 核心库文件 │ ├── Config.go # 配置管理 │ ├── upload.go # 文件上传处理 │ ├── download.go # 文件下载处理 │ ├── imageResize.go # 图片缩放处理 │ ├── gifresize.go # GIF 动图处理 │ ├── saveFile.go # 文件保存逻辑 │ ├── hashids.go # ID 哈希处理 │ ├── api.go # API 接口 │ ├── Redis.go # Redis 连接 │ ├── LimitConn.go # 连接限制 │ └── ... ├── public/ # 静态文件目录 │ ├── index.html # 上传页面 │ └── js/ # JavaScript 库 └── img/ # 示例图片目录 ``` ## 快速开始 ### 环境要求 - Go 1.16+ - Redis (可选) ### 安装依赖 ```bash go mod tidy ``` ### 配置文件 编辑 `upload.conf` 文件: ```ini [base] # 上传目录配置 dir.upload = ./uploads/upload/ dir.thumb = ./uploads/thumb/ # 日志文件 log = ./upload.log # 连接限制 limit.rate = 100 limit.burst = 100 [proto] # HTTP 服务配置 tcp.addr = 0.0.0.0:8080 # HTTPS 服务配置 (可选) tls.addr = 0.0.0.0:8888 tls.cert = ./ca/cert.pem tls.key = ./ca/key.pem # Redis 配置 (可选) redis.addr = 192.168.1.10:6370 redis.db = 15 # 加密盐值 salt = JonGates ``` ### 启动服务 ```bash go run main.go ``` 服务启动后访问: `http://localhost:8080` ## API 接口 ### 文件上传 - **URL**: `/upload/` - **方法**: POST - **参数**: `file` (multipart/form-data) - **返回**: JSON 格式的上传结果 ### 文件下载 - **原图**: `/k/{md5hash}.{ext}` - **缩略图**: `/k/{md5hash}.{ext}!{width}_{height}` ### API 查询 - **URL**: `/upload/api/` - **方法**: GET - **参数**: - `act=get&md5[]={hash}` - 检查文件是否存在 - `act=set&md5[]={hash}` - 申请上传 ID ### 哈希 ID 访问 - **URL**: `/id/{hashid}` - **说明**: 通过哈希 ID 访问文件 ## 使用示例 ### 上传文件 ```javascript // 使用内置的上传组件 $('#csupload').csupload({ uploadUrl: 'http://localhost:8080/upload/', success: function(result) { console.log('上传成功:', result); } }); ``` ### 访问图片 ```html ``` ## 部署说明 ### 生产环境部署 1. 编译二进制文件: ```bash go build -o upload_server main.go ``` 2. 配置 systemd 服务 (Linux): ```ini [Unit] Description=Go Upload Server After=network.target [Service] Type=simple User=www-data WorkingDirectory=/path/to/upload_server ExecStart=/path/to/upload_server/upload_server Restart=always [Install] WantedBy=multi-user.target ``` 3. 配置 Nginx 反向代理: ```nginx server { listen 80; server_name your-domain.com; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ``` ### Docker 部署 ```dockerfile FROM golang:1.19-alpine AS builder WORKDIR /app COPY . . RUN go build -o upload_server main.go FROM alpine:latest RUN apk --no-cache add ca-certificates WORKDIR /root/ COPY --from=builder /app/upload_server . COPY --from=builder /app/upload.conf . COPY --from=builder /app/public ./public CMD ["./upload_server"] ``` ## 许可证 本项目采用 MIT 许可证,详见 [LICENSE](LICENSE) 文件。 ## 贡献 欢迎提交 Issue 和 Pull Request 来改进这个项目。