11import os
22
3+ import oss2
34from flask import jsonify , request
45from lin .config import lin_config
56from lin .db import db
67from lin .exception import Failed , ParameterError , Success
78from 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
1313api = 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
0 commit comments