Flask:
# 上传文件
class UploadView(Resource):
def post(self):
img = request.files.get('img')
if not img:
return jsonify({
'code': 400, 'msg': '没有接收到文件'
})
filename = datetime.strftime(datetime.now(), '%Y%m%d%H%M%S')
filename += str(random.randint(100000, 999999))
filename += '.'
filename += img.filename.split('.')[-1]
img.save('./static/' + filename)
# img.save(os.path.join('static', filename))
from qiniu import Auth, put_file
# 需要填写你的 Access Key 和 Secret Key
access_key = 'v4JRKhMbX_X3n5WNvxCSmWYzqiNs3jzG_KJedmrR'
secret_key = 'uDv2qMfPCJmJDZ5DgYhx8iGgUPGXm6B3zfzeaD0R'
# 构建鉴权对象
q = Auth(access_key, secret_key)
# 要上传的空间
bucket_name = 'flask11'
# 上传后保存的文件名
key = 'static/' + filename
# 生成上传 Token,可以指定过期时间等
token = q.upload_token(bucket_name, key, 3600)
# 要上传文件的本地路径
localfile = './static/' + filename
info = put_file(token, key, localfile)
print(info)
if info[0]['key'] == key:
return jsonify({
'code': 200, 'msg': '上传成功',
'data': {
'filename': key
}
})
else:
return jsonify({
'code': 400, 'msg': '上传失败'
})
Django上传 之修改头像 / 前后端:
# 用户上传头像
class UploadView(APIView):
def post(self, request):
file_img = request.FILES.get('file_img')
if not file_img:
return Response({
'code': 400, 'msg': '没有接收到文件'
})
file_name = file_img.name # 获取文件名
# s = os.path.splitext(file_name)[0] # 121645B2jAV
# b = os.path.splitext(file_name)[1] # .jpg
suffix = file_name[file_name.rfind('.') + 1:] # rfind获取文件后缀名
file_format = ['pdf', 'PDF', 'jpg', 'JPG'] # 设置文件格式要求
if suffix in file_format:
filename = datetime.strftime(datetime.now(), '%Y%m%d%H%M%S')
filename += str(random.randint(10000, 99999))
filename += '.'
filename += suffix
# 从配置文件中载入图片保存路径
IMG_DIRS = settings.STATICFILES_DIRS
img_path = os.path.join(IMG_DIRS[0], filename)
# 写入文件到本地
with open(img_path, 'ab') as f:
# 如果上传的图片非常大,就通过chunks()方法分割成多个片段来上传
for chunk in file_img.chunks():
f.write(chunk)
# 上传七牛云
from qiniu import Auth, put_file, etag
import qiniu.config
# 需要填写你的 Access Key 和 Secret Key
access_key = 'v4JRKhMbX_X3n5WNvxCSmWYzqiNs3jzG_KJedmrR'
secret_key = 'uDv2qMfPCJmJDZ5DgYhx8iGgUPGXm6B3zfzeaD0R'
# 构建鉴权对象
q = Auth(access_key, secret_key)
# 要上传的空间
bucket_name = 'zxdjango'
# 上传后保存的文件名
key = 'static/' + filename
# 生成上传 Token,可以指定过期时间等
token = q.upload_token(bucket_name, key, 3600)
# 要上传文件的本地路径
localfile = './static/' + filename
info = put_file(token, key, localfile)
print(info)
if info[0]['key'] == key:
return Response({
'code': 200, 'msg': '上传成功',
'data': {
'filename': key
}
})
else:
return Response({
'code': 400, 'msg': '上传失败'
})
return Response({
'code': 400, 'msg': '请上传pdf或jpg格式的文件'
})
# 用户信息
class UserInfo(APIView):
# 展示用户信息
@check_login
def get(self, request):
info = UserModel.objects.filter(id=request.user_id).first()
dic = {
'name': info.name,
'photo': info.photo,
'phone': info.phone,
}
return Response({
'code': 200, 'msg': '用户信息获取成功',
'data': dic
})
# 用户修改信息
@check_login
def put(self, request):
name = request.data.get('name')
phone = request.data.get('phone')
photo = request.data.get('photo')
info = UserModel.objects.filter(id=request.user_id).first()
if name:
info.name = name
if phone:
info.phone = phone
if photo:
info.photo = photo
info.save()
return Response({
'code': 200, 'msg': '用户信息修改成功'
})
urlpatterns = [
path('upload/', views.UploadView.as_view()),
path('userinfo/', views.UserInfo.as_view()),
]
前端对接:
<template>
<el-upload
action="http://127.0.0.1:8000/friendcircle/upload/"
name="file_img"
:show-file-list="false"
:on-success="uploadAct"
>
<el-avatar
:size="60"
v-if="userinfo.photo"
:src="imageUrl + userinfo.photo"
></el-avatar>
<el-avatar
:size="60"
v-else
:src="require('@/assets/02.png')"
></el-avatar>
</el-upload>
</template>
<script>
data() {
return {
imageUrl: "http://rnywebpao.sabkt.gdipper.com/",
filename: "",
userinfo: [],
};
},
mounted() {
this.UserInfo();
},
methods: {
methods: {
//修改头像
uploadAct(resp) {
console.log(resp);
if (resp.code == 200) {
this.photo = resp.data.filename;
axios
.put(
"/friendcircle/userinfo/",
{ photo: this.photo },
{ headers: { token: localStorage.getItem("token") } }
)
.then((res) => {
if (res.data.code == 200) {
this.$message(res.data.msg);
location.reload();
}
})
.catch((err) => {
console.log(err);
});
}
},
//挂载用户信息
UserInfo() {
axios
.get("/friendcircle/userinfo/", {
headers: {
token: localStorage.getItem("token") || "",
},
})
.then((resp) => {
console.log(resp);
this.userinfo = resp.data.data;
})
.catch((err) => {});
},
logout() {},
},
</script>