Skip to content

Commit 52ce53f

Browse files
committed
feat:qiniu upload resolve #129
1 parent 43ddd0a commit 52ce53f

18 files changed

Lines changed: 122 additions & 63 deletions

File tree

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,4 +198,5 @@ flask run
198198
## 后续开发计划
199199

200200
- [X] 重构插件机制
201-
- [ ] 七牛上传插件
201+
- [X] 新增七牛上传插件
202+
- [ ] 扩展行为日志

app/cli/plugin/generator.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ def test():
2727
"""
2828

2929
info = """
30-
__name__ = '{0}'
31-
__version__ = '0.1.0'
32-
__author__ = 'Team Lin'
30+
__name__ = "{0}"
31+
__version__ = "0.1.0"
32+
__author__ = "Team Lin"
3333
"""
3434

3535
readme = """# {0}"""

app/cli/plugin/init.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ def __cal_setting(new_setting, old_setting):
198198

199199
return final_setting
200200

201+
201202
def init():
202203
plugin_name = input("请输入要初始化的插件名,如果多个插件请使用空格分隔插件名,输入*表示初始化所有插件:\n")
203204
PluginInit(plugin_name)

app/config/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,4 @@ class BaseConfig(object):
5656
PAGE_DEFAULT = 0
5757

5858
# 兼容中文
59-
JSON_AS_ASCII = False
59+
JSON_AS_ASCII = False

app/plugin/oss/README.md

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1 @@
1-
# oss 插件
2-
3-
## 插件模板自动生成
4-
5-
请在项目的根目录下运行如下命令:
6-
7-
```bash
8-
flask plugin generate oss
9-
```
10-
11-
即可快速生成一个名为 oss 的插件
12-
13-
## 添加 requirements.txt
14-
15-
如果你是在插件中使用了一些第三方库,这些库在主应用中是没有的,那么请你将它添加到**requirements.txt**中。
1+
# oss 插件

app/plugin/oss/app/__init__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1 @@
11
from .controller import api
2-
from .model import Image

app/plugin/oss/app/controller.py

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import os
22

3+
import oss2
34
from flask import jsonify, request
45
from lin.config import lin_config
56
from lin.db import db
67
from lin.exception import Failed, ParameterError, Success
78
from lin.redprint import Redprint
9+
from lin.utils import get_random_str
810

9-
from .enums import LocalOrCloud
10-
from .model import Image
11-
from .oss import upload_image_bytes
11+
from .model import OSS
1212

1313
api = Redprint("oss")
1414

@@ -36,10 +36,10 @@ def upload_to_ali():
3636
if url:
3737
res = {"url": url}
3838
with db.auto_commit():
39-
exist = Image.get(url=url)
39+
exist = OSS.get(url=url)
4040
if not exist:
41-
data = {"from": LocalOrCloud.CLOUD.value, "url": url}
42-
one = Image.create(**data)
41+
data = {"url": url}
42+
one = OSS.create(**data)
4343
db.session.flush()
4444
res["id"] = one.id
4545
else:
@@ -60,10 +60,10 @@ def upload_multiple_to_ali():
6060
if url:
6161
# 每上传成功一次图片需记录到数据库
6262
with db.auto_commit():
63-
exist = Image.get(url=url)
63+
exist = OSS.get(url=url)
6464
if not exist:
65-
data = {"from": LocalOrCloud.CLOUD.value, "url": url}
66-
res = Image.create(**data)
65+
data = {"url": url}
66+
res = OSS.create(**data)
6767
db.session.flush()
6868
imgs.append({"key": item, "url": url, "id": res.id})
6969
else:
@@ -75,3 +75,20 @@ def allowed_file(filename):
7575
return "." in filename and filename.rsplit(".", 1)[1] in lin_config.get_config(
7676
"oss.allowed_extensions", []
7777
)
78+
79+
80+
def upload_image_bytes(name: str, data: bytes):
81+
access_key_id = lin_config.get_config("oss.access_key_id")
82+
access_key_secret = lin_config.get_config("oss.access_key_secret")
83+
auth = oss2.Auth(access_key_id, access_key_secret)
84+
bucket = oss2.Bucket(
85+
auth,
86+
lin_config.get_config("oss.endpoint"),
87+
lin_config.get_config("oss.bucket_name"),
88+
)
89+
suffix = name.split(".")[-1]
90+
rand_name = get_random_str(15) + "." + suffix
91+
res = bucket.put_object(rand_name, data)
92+
if res.resp.status == 200:
93+
return res.resp.response.url
94+
return None

app/plugin/oss/app/enums.py

Lines changed: 0 additions & 8 deletions
This file was deleted.

app/plugin/oss/app/model.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
from lin.interface import BaseCrud
2-
from sqlalchemy import Column, FetchedValue, Integer, String
2+
from sqlalchemy import Column, Integer, String
33

44

5-
class Image(BaseCrud):
6-
__tablename__ = "image"
5+
class OSS(BaseCrud):
6+
__tablename__ = "oss"
77

88
id = Column(Integer, primary_key=True)
99
url = Column(String(255), nullable=False)
10-
_from = Column("from", Integer, nullable=False, server_default=FetchedValue())

app/plugin/oss/app/oss.py

Lines changed: 0 additions & 20 deletions
This file was deleted.

0 commit comments

Comments
 (0)