AI图像生成网站
目录
一、项目介绍
二、雪花算法
三、JWT认证与令牌桶算法
四、项目架构
五、图床上传与图像生成API搭建
六、项目测试与优化
五、图床上传与图像生成API搭建
在项目中,我们通过整合 Go 和 FastAPI 实现了图像的上传和生成功能。本文将介绍该功能模块的设计与实现细节,主要包括图床上传 API 和图像生成 API 的开发。
1. 图床上传
SM.MS 是一个免费的在线图床服务,提供简单快速的图片上传和托管功能。用户可以通过 API 上传图片并获取公开访问的链接,这在构建需要处理图片的应用程序时非常方便。
本项目的注册、创建分组、图像生成和作品上传等功能中,均使用到了SMMS图床服务提供的API,通过将本地 Base64 编码的图片文件上传到图床,来获取图像的永久链接。
上传流程
- Base64 解码:将用户上传的图片从 Base64 编码格式转换为二进制流。
- 多部分表单提交:通过
multipart/form-data
格式上传图片文件,适配 SM.MS API 的接口要求。 - API Token 授权:使用
Authorization
头携带 API Token 确保安全性。
代码如下:
// UploadImageToSMMS 上传图像到 SM.MS 图床
func UploadImageToSMMS(base64Image string) (string, error) {
url := "https://sm.ms/api/v2/upload"
if strings.HasPrefix(base64Image, "data:image") {
base64Image = strings.Split(base64Image, ",")[1]
}
// 将 Base64 图片解码为文件字节流
decodedImage, err := base64.StdEncoding.DecodeString(base64Image)
if err != nil {
return "", fmt.Errorf("Base64 解码失败: %v", err)
}
// 创建一个缓冲区和多部分表单写入器
body := &bytes.Buffer{
}
writer := multipart.NewWriter(body)
// 创建文件字段
part, err := writer.CreateFormFile("smfile", "image.png")
if err != nil {