注册七牛云,实名认证,点击对象存储,创建公开空间找到python SDK,在项目下创建一个util.py文件,粘贴下去util.py修改如下
from qiniu
import Auth
, put_file
, etag
, put_data
import qiniu
.config
import random
import datetime
from werkzeug
.utils
import secure_filename
def upload(filestorage
):
'''上传图片'''
access_key
= 'gYE5FmsnJXtAwH2cEhPXQVk'
secret_key
= 'sV6rNj-q1SX4echtu-Gy-Q'
q
= Auth
(access_key
, secret_key
)
bucket_name
= 'flask'
filename
= filestorage
.filename
ran
= random
.randint
(1, 10000)
now_time
= datetime
.datetime
.now
().strftime
('%Y%m%d%H%M%S')
suffix
= filename
.rsplit
('.')[-1]
key
= str(now_time
) + filename
.rsplit
('.')[0] + str(ran
) + '.' + suffix
key
= secure_filename
(key
)
token
= q
.upload_token
(bucket_name
, key
, 3600)
ret
, info
= put_data
(token
, key
, filestorage
.read
())
return ret
, info
在flask后端调用,数据库只保存上传后的图片文件名
@user_bp
.route
('/upload_photo', methods
=['GET', 'POST'])
def upload_photo():
'''上传图片到七牛云并展示到前端'''
photos
= Photo
.query
.filter(Photo
.user_id
== g
.user
.id).all()
if request
.method
== 'POST':
photo
= request
.files
.get
('photo')
ret
, info
= upload
(photo
)
if info
.status_code
== 200:
photo
= Photo
()
photo
.photo_name
= ret
['key']
photo
.user_id
= g
.user
.id
db
.session
.add
(photo
)
db
.session
.commit
()
return 'ok'
else:
return '失败'
return render_template
('user/upload_photo.html', photos
=photos
)
前端展示,CDN 测试域名+图片文件名
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title
</title>
</head>
<body>
<h1>上传图片
</h1>
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="photo"><br>
<input type="submit" value="上传">
</form>
<hr>
<h1>展示图片(公开空间域名+图片文件名)
</h1>
{% for photo in photos %}
<img src="http://qhpzt6wpn.hn-bkt.clddn.com/{{ photo.photo_name }}" alt="">
<hr>
{% endfor %}
</body>
</html>
效果