avatar 不用base64

This commit is contained in:
Benny
2023-02-27 20:45:20 +01:00
parent 2907b636f3
commit b2dab5320e
4 changed files with 26 additions and 25 deletions

Submodule YYeTsFE updated: e2a3426462...d816233cb2

View File

@@ -74,13 +74,6 @@ class Mongo:
def is_old_user(self, username: str) -> bool:
return bool(self.db["users"].find_one({"username": username, "oldUser": True}))
@staticmethod
def b64_image(img):
if not img:
return ""
mime = filetype.guess_mime(img) or "image/jpeg"
return f"data:{mime};base64,{base64.b64encode(img).decode('utf-8')}"
class FakeMongoResource:
pass
@@ -198,7 +191,7 @@ class CommentMongoResource(CommentResource, Mongo):
user = self.db["users"].find_one({"username": username}) or {}
group = user.get("group", ["user"])
comment["group"] = group
comment["avatar"] = self.b64_image(user.get("avatar", b""))
comment["hasAvatar"] = bool(user.get("avatar"))
if username in whitelist:
comment["group"].append("publisher")
@@ -620,7 +613,7 @@ class ResourceMongoResource(ResourceResource, Mongo):
"resourceID": comment_rid,
"resourceName": d["data"]["info"]["cnname"],
"origin": "comment",
"avatar": c["avatar"],
"hasAvatar": c["avatar"],
}
)
@@ -814,7 +807,7 @@ class UserMongoResource(UserResource, Mongo):
projection = {"_id": False, "password": False}
data = self.db["users"].find_one({"username": username}, projection)
data.update(group=data.get("group", ["user"]))
data["avatar"] = self.b64_image(data.get("avatar", b""))
data["hasAvatar"] = bool(data.pop("avatar", None))
return data
def update_user_last(self, username: str, now_ip: str) -> None:
@@ -877,7 +870,8 @@ class UserAvatarMongoResource(UserMongoResource, Mongo):
def get_avatar(self, username):
user = self.db["users"].find_one({"username": username})
img = user.get("avatar", b"")
return self.b64_image(img)
mime = filetype.guess_mime(img)
return {"image": img, "content_type": mime}
class DoubanMongoResource(DoubanResource, Mongo):

View File

@@ -239,29 +239,36 @@ class UserAvatarHandler(BaseHandler):
# instance = UserMongoResource()
@run_on_executor()
def avatar(self) -> dict:
def update_avatar(self):
username = self.get_current_user()
if not username:
self.set_status(HTTPStatus.UNAUTHORIZED)
self.clear_cookie("username")
return {"message": "Please try to login"}
if self.request.method == "POST":
file = self.request.files["image"][0]['body']
if len(file) > 10 * 1024 * 1024:
self.set_status(HTTPStatus.REQUEST_ENTITY_TOO_LARGE)
return {"message": "图片大小不可以超过10MB"}
return self.instance.add_avatar(username, file)
return self.instance.get_avatar(username)
file = self.request.files["image"][0]['body']
if len(file) > 10 * 1024 * 1024:
self.set_status(HTTPStatus.REQUEST_ENTITY_TOO_LARGE)
return {"message": "图片大小不可以超过10MB"}
return self.instance.add_avatar(username, file)
@run_on_executor()
def get_avatar(self, username):
data = self.instance.get_avatar(username)
if data["image"]:
self.set_header("Content-Type", data["content_type"])
return data["image"]
self.set_status(HTTPStatus.NOT_FOUND)
return b""
@gen.coroutine
def post(self):
resp = yield self.avatar()
def post(self, _):
resp = yield self.update_avatar()
self.write(resp)
@gen.coroutine
def get(self):
resp = yield self.avatar()
def get(self, username):
resp = yield self.get_avatar(username)
self.write(resp)

View File

@@ -52,7 +52,7 @@ class RunServer:
(r'/api/top', TopHandler),
(r'/api/like', LikeHandler),
(r'/api/user', UserHandler),
(r'/api/user/avatar', UserAvatarHandler),
(r'/api/user/avatar/?(.*)', UserAvatarHandler),
(r'/api/user/email', UserEmailHandler),
(r'/api/name', NameHandler),
(r'/api/comment', CommentHandler),