一个restful视频图片管理后端服务,提供html版和electron版本
对原有项目mgek_imghost的重写,分成前后端项目,此项目仅提供后端的api服务
基于原生的Flask实现,旨在提供轻量使用简易的图床服务
- 图片的上传保存服务,目前支持
jpg
,png
,webp
,gif
格式的图片上传,大小限制为10mb - 图片的唯一化存储,默认使用
sqlite
数据库存储图片数据,可以使用配置文件修改为MongoDB
存储 - 图片名称安全化处理,无需考虑文件名称是否符合标准,后端会自动生成标准的唯一图片标识。默认使用
base64
编码,可以设置为使用md5
摘要的方式 - 接口响应统一格式化,通过封装函数实现JSON响应数据的标准化
- 标准化的配置文件,JSON格式的配置文件,在服务启动后自动生成,可以根据需求进行修改
- 原生支持异步IO处理
- 全局实现双数据库sqlite/MongoDB切换
- 支持用户的token认证服务
- 支持用户通过邮件找回token
- 支持用户通过邮件删除账户
- 后端的文件错误类型处理机制优化
- 视频文件的上传
- 数据分页处理
- 日志记录器
感谢先科大佬提供技术支持,本项目的测试文件经先科大佬指导完成
感谢先科大佬提供的数据库优化思路
{
"port": 5000,
"debug": true,
"server_name": null,
"multiroutine": false,
"server": {
"image_path": "",
"image_size": 10485760,
"image_url": "http://localhost:5000/images/",
"image_rule": "base64",
"image_zip": false,
"image_zip_path": ""
},
"database": {
"engine": "sqlite",
"sqlite": "sqlite:///test.db",
"mongo": ""
}
}
通过配置文件可以自定义服务器
server_name
服务绑定的域名,在部署到服务器后可以使用
multiroutine
是否使用异步IO支持,仅在不使用Server部署时使用
image_path
图片的保存地址,绝对路径,为空时系统会自动生成
image_url
图片在服务器上的地址,需要在定义域名后使用
image_rule
图片的命名规则,使用base64或者md5
image_zip
是否开启缩略图
image_zip_path
默认的缩略图存储位置,绝对路径
engine
使用的数据库类型sqlite或者MongoDB
本项目对响应函数进行了封装以实现统一化的响应数据
{
"data": "图片信息获取失败",
"type": "error"
}
{
"data": "图片信息获取成功",
"type": "ok"
}
{
"data": "文件上传成功",
"type": "ok"
}
{
"data": "空的上传文件",
"type": "error"
}
使用WSGI服务或者ASGI服务部署此应用
$ gunicorn -w 2 -b 127.0.0.1:5000 img_server:app
具体使用参数参考
当前支持保存token
至sqlite
,mongo
接口 | 解释 | 请求方式 | 请求参数 | 响应 |
---|---|---|---|---|
/api/get_token | 获取token | post | JSON {mail: 邮箱} | token |
/api/remove_token | 删除token | get | ARGS ?mail=xx&token=xx | dict |
/api/remove_token | 删除token(通过邮件) | get | ARGS ?mail=xx&check=xx | dict |
/api/mail_for_reset | 发送找回邮件 | post | JSON maill:邮箱 | dict |
接口 | 解释 | 请求方式 | 请求参数 | 响应 |
---|---|---|---|---|
/api/image_upload | 图片上传 | post | 表单 {file:文件} | ok/error |
/api/image_list | 图片列表 | get | 可选{page: int}是否分页 | list |
/api/image_info | 图片详细信息 | get | JSON {"name": 图片名称} | dict |
/api/image_format | 图片格式化输出 | get | JSON {"name": 图片名称} | dict |
/api/image_delete | 图片删除 | post | JSON {"name": 图片名称} | ok/error |
接口 | 解释 | 请求方式 | 请求参数 | 响应 |
---|---|---|---|---|
/api/init_db | 初始化数据库 | post | ok/bad |
通过源码修改自己的服务器
middleware/jwt_middleware.py
if global_config.engine == 'sqlite':
ts = Token.query.all()
for t in ts:
if token == t.token:
pass
elif token == test_token["token"]:
pass
else:
return abort(401)
else:
# mongo not support
pass
在else模块里添加mongodb的逻辑语句
config/flask_config.py
SECRET_KEY = 'This is a Secret Key'
修改默认的密钥
config/flask_config.py
MONGO_DBNAME = 'mongo_mgekimghost'
MONGO_URI = 'mongodb://localhost:27017/mgek_imghost'
MONGO_HOST = 'localhost'
MONGO_PORT = 27017
MONGO_USERNAME = None
MONGO_PASSWORD = None
在这里定义你的mongo数据库名称,连接地址
config/flask_config.py
JWT = True
设置为False时不启用token认证,任何人都可以访问API接口
app/database.py
在这里修改或添加逻辑以封装sqlite和mongo的操作语句
仅支持sqlite的数据库模型修改
app/models.py
通过新建类模型映射的方式 添加新的表和字段
app/config/flask_config.py
MAIL_HOST = 'smtp.163.com'
MAIL_PORT = 465
MAIL_USER = 'yourmail@163.com'
MAIL_PASS = 'mail_password'
填写自己的邮件服务器相关参数,邮件服务器SMTP地址,端口。邮箱账号和密码
http://localhost:5000/api/remove_token?mail=xxx@xx.com&check=1589767493.3290768
链接的渲染格式如下
'http://{}/api/remove_token?mail={}&check={}'.format(server_name, address, check)
在flask_config.py
中修改SERVER_NAME字段以自定义域名,默认为localhost。或者在全局配置文件config.json
里修改server_name
app/utils/mail.py
联系我 Lander
facebook: fb.me/landers1037