1:导入element
<!-- 引入样式 --> <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css" rel="external nofollow" > <!-- 引入组件库 --> <script src="/UploadFiles/2021-04-08/vue.min.js">2:前端文件
css: .avatar-uploader .el-upload { border: 1px dashed #d9d9d9; border-radius: 6px; cursor: pointer; position: relative; overflow: hidden; } .avatar-uploader .el-upload:hover { border-color: #409EFF; } .avatar-uploader-icon { font-size: 28px; color: #8c939d; width: 178px; height: 178px; line-height: 178px; text-align: center; } .avatar { width: 178px; height: 178px; display: block; } html: {% comment %} 上传图片 {% endcomment %} <div id="profile"> <h1 style="text-align: center" >更新社团封面</h1> <div id="app" style="text-align: center"> <el-upload :data= "datas" // 携带的参数 :headers="headers" // 请求头 name="image" {% comment %} 后端接收的参数名 {% endcomment %} class="avatar-uploader" action="/show/images/" {% comment %} 上传路由地址 {% endcomment %} :show-file-list="false" :on-success="handleAvatarSuccess" {% comment %} 文件上传成功时的钩子 {% endcomment %} :before-upload="beforeAvatarUpload"> {% comment %} 上传文件之前的钩子,参数为上传的文件 {% endcomment %} <img v-if="imageUrl" :src="/UploadFiles/2021-04-08/imageUrl">3:后端文件
路由: # 预览图片url("show/images/$", add_image.Image.as_view()), py文件:from rest_framework.views import APIView from SocietyPlat import settings from django.shortcuts import render, redirect, HttpResponse from Databases import models from django.http import JsonResponse import os # 获取相对路径 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) class Image(APIView): def post(self, request): # 接收文件 file_obj = request.FILES.get('image',None) style = requetst.data.get('data') # 用户名 # username = str(request.data.get("username")) username = "Wang" print("file_obj",file_obj.name) # 判断是否存在文件夹 head_path = BASE_DIR + "\\media\\{}\\head".format(username).replace(" ","") print("head_path",head_path) # 如果没有就创建文件路径 if not os.path.exists(head_path): os.makedirs(head_path) # print("文件名",file_obj.name) # 文件名 name.png # # print("文件二进制",file_obj.read()) # 文件二进制 b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x0 # # print("判断文件> 2.5M",file_obj.multiple_chunks(chunk_size=None)) # 文件大小 False小于2.5M # # print("文件大小",file_obj.size) # 文件大小 12651 # # print("文件编码",file_obj.charset) # None # # print("随文件一起上传的内容类型标题",file_obj.content_type) # image/png # # print("包含传递给content-type标头的额外参数的字典",file_obj.content_type_extra) # {} # # print("text/content-types提供的utf8字符集编码",file_obj.charset) # None # # # 图片后缀 head_suffix = file_obj.name.split(".")[1] print("图片后缀",head_suffix) # 图片后缀 png # 储存路径 file_path = head_path + "\\{}".format("head." + head_suffix) file_path = file_path.replace(" ","") print("储存路径", file_path) # C:\Users\user\Desktop\DownTest\media\username\head\head.png # 上传图片 with open(file_path, 'wb') as f: for chunk in file_obj.chunks(): f.write(chunk) message = {} message['code'] = 200 # 返回图片路径 back_path = '\static\{}\head\{}'.format(username,"head." + head_suffix).replace(" ","") message['image'] = back_path return JsonResponse(message)补充知识:django后台接口处理element-ui的el-upload组件form data类型数据
对于向我这样一只前端和后端的双咸鱼来说写一个不了解的接口实在是太难受了,前端不知道在哪找数据,后端又不知道处理什么样的数据。
现在有这样一个需求,我需要使用element-ui中的el-upload组件完成一个上传文件的功能。但是不知道是不是因为我没有发现,我翻遍了官网都没有找到这个组件点击上传以后发的是什么样的数据请求。
终于我好像突然想起来浏览器的开发者工具可以查看发出的请求
于是我们可以写这么一个组件来一探究竟:
点击上传到服务器以后前台就会发出请求,我们就可以使用devtool看具体的请求头等等数据,具体位置在这里:
点击这个upload,找一找,我们就会发现最下面有一个file
这应该就是我们要上传的文件。可以看见它是以form data的形式上传的。
所以我们就可以写对应的后端接口了。
这里给一个接口的demo
def writeFile(filePath, file): with open(filePath, "wb") as f: if file.multiple_chunks(): for content in file.chunks(): f.write(content) else: data=file.read() ###.decode('utf-8') f.write(data) def uploadFile(request): if request.method == "POST": fileDict = request.FILES.items() # 获取上传的文件,如果没有文件,则默认为None if not fileDict: return JsonResponse({'msg': 'no file upload'}) for (k, v) in fileDict: print("dic[%s]=%s" %(k,v)) fileData = request.FILES.getlist(k) for file in fileData: fileName = file._get_name() filePath = os.path.join(settings.TEMP_FILE_PATH, fileName) print('filepath = [%s]'%filePath) try: writeFile(filePath, file) except: return JsonResponse({'msg': 'file write failed'}) return JsonResponse({'msg': 'success'})另外想要在前端获取后端返回的请求的话可以使用on-success、on-error、on-exceed这几个钩子函数,具体可以在element ui的官网找到
以上这篇Django后端分离 使用element-ui文件上传方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 《暗喻幻想》顺风耳作用介绍
- 崔健1985-梦中的倾诉[再版][WAV+CUE]
- 黄子馨《追星Xin的恋人们2》HQ头版限量编号[WAV+CUE]
- 孟庭苇《情人的眼泪》开盘母带[低速原抓WAV+CUE]
- 孙露《谁为我停留HQCD》[低速原抓WAV+CUE][1.1G]
- 孙悦《时光音乐会》纯银CD[低速原抓WAV+CUE][1.1G]
- 任然《渐晚》[FLAC/分轨][72.32MB]
- 英雄联盟新英雄安蓓萨上线了吗 新英雄安蓓萨技能介绍
- 魔兽世界奥杜尔竞速赛什么时候开启 奥杜尔竞速赛开启时间介绍
- 无畏契约CGRS准星代码多少 CGRS准星代码分享一览
- 张靓颖.2012-倾听【少城时代】【WAV+CUE】
- 游鸿明.1999-五月的雪【大宇国际】【WAV+CUE】
- 曹方.2005-遇见我【钛友文化】【WAV+CUE】
- Unity6引擎上线:稳定性提升、CPU性能最高提升4倍
- 人皇Sky今日举行婚礼!电竞传奇步入新篇章