# 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 来改进这个项目。