Y11

1、 创建新app,配置路由和settings(Y10博客有具体操作)

2、创建一个上传页面(html),在views中渲染页面,配置路由,配置css,引入css,引入共享文件jquery

3、创建common_static共享文件目录,templates/app前端页面目录,static静态文件目录。 另外还要创建文件传入后要存储和读取的目录,如存取img,即创建file/img

4、在views中定义函数完成文件上传后存储的功能
(1)引入csrf验证模块,from django.views.decorators.csrf import csrf_exempt
(2)@csrf_exempt
(3)具体功能实现

def deal_file(request):# 获取前端传输的文件对象file_obj = request.FILES.get('file')# 获取文件类型img_type = file_obj.name.split('.')[1]# 将文件类型中的数据大写全部转换成小写img_type = img_type.lower()if img_type in ['png','jpg','jpeg','gif']:# 将图片存到指定目录# 获取当前时间的时间戳timestr = str(time.time()).replace('.','')# 获取程序需要写入的文件路径path = os.path.join(settings.BASE_DIR, 'app2/file/img/{0}{1}'.format(timestr, file_obj.name))# 根据路径打开指定的文件(以二进制读写方式打开)f = open(path,'wb+')# chunks将对应的文件数据转换成若干片段, 分段写入, 可以有效提高文件的写入速度, 适用于2.5M以上的文件for chunk in file_obj.chunks():f.write(chunk)f.close()msg = {'code':200, 'url':'http://127.0.0.1:8000/app2/pass_data/{0}{1}'.format(timestr,file_obj.name), 'error':''}else:# 存储失败, 返回错误信息msg = {'code':305, 'url':'', 'error':'暂不支持该类型'}return HttpResponse(json.dumps(msg))
# 定义函数完成指定服务器向前端返回指定文件
def pass_img_data(request, img_name):path = os.path.join(settings.BASE_DIR, 'app2/file/img/{0}'.format(img_name))if os.path.exists(path):
#         # 文件存在, 读取文件数据f = open(path, 'rb+')data = f.read()f.close()return HttpResponse(data)else:return HttpResponse('')

注意
(1) 获取文件对象:file_obj = request.FILES.get(‘file’),其中注意文件获取需要.FILES
(2) 导入time模块, 利用时间戳给每一张图片设定唯一名字
(3) 通过.format将时间戳和图片名字拼接一起
(4) 文件写入必须是二进制方式写入
(5) chunks将对应的文件数据转换成若干片段, 分段写入, 可以有效提高文件的写入速度, 适用于2.5M以上的文件

5、在urls.py中配置对应路由

from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [path('upload/', views.render_upload, name="upload"),path('deal_file/<str:account>/', views.deal_file, name="deal_file"),path('pass_data/<str:account>/<str:img_name>/', views.pass_img_data, name="pass_data"),
]

6、在传入页面中,写JS代码

<script src="{%static 'js/jquery.min.js'%}"></script>
<script src="{%static 'js/csrf.js'%}"></script>
<script type="text/javascript">// 该事件用来监听文件上传控件是否选择好指定文件$('#file').on('change',function () {//获取文件选择控件选择的图片对象//let file_c = document.getElementById('file');let file_c = $('#file').get(0);// files是input[type=file]的属性, 用来存储文件选择控件选择的图片对象, 是一个数组类型let file_obj = file_c.files[0];// 将文件类型的数据打包成form表单数据let formD = new FormData();formD.append('file',file_obj);//正式进行数据传输create_csrf(); //生成csrf——token$.ajax({url:'{%url "deal_file"%}',type:'post',data:formD,// 数据传输过程中不需要将数据转换成字符串processData:false,// ajax传输数据过程中不需要重新设置数据的编码格式contentType:false,success:function (res) {let msg = JSON.parse(res);if(msg.code == 200){$('#photo').attr('src',msg.url);}else {alert(msg.error);}}});});

注意:在文件上传时,form表单的数据传输方式必须为post, 并且编码格式为multipart/form-data, 否则服务器是无法获取传输的文件数据

<form method="post" enctype="multipart/form-data">

若需要查看具体代码,在此分享本人创建过的供学习的django工程(以上为工程django_2):
链接:https://pan.baidu.com/s/1v74l_n_1F5WoRxOb7YlRjg
提取码:ev9p

个人小结,定有不足之处,欢迎指点。
谢谢~

django文件上传功能的实现相关推荐

  1. Django文件上传***

    分别用三种Django文件上传方式(form方式.jQuery+jQuery.ajax方式.原生JS+原生ajax方式)做上传功能示例 文件 文件释义 form_upload.html form上传文 ...

  2. 实现HTTP协议Get、Post和文件上传功能——使用libcurl接口实现

    之前我们已经详细介绍了WinHttp接口如何实现Http的相关功能.本文我将主要讲解如何使用libcurl库去实现相关功能.(转载请指明出于breaksoftware的csdn博客) libcurl在 ...

  3. 实现HTTP协议Get、Post和文件上传功能——使用WinHttp接口实现

    在<使用WinHttp接口实现HTTP协议Get.Post和文件上传功能>一文中,我已经比较详细地讲解了如何使用WinHttp接口实现各种协议.在最近的代码梳理中,我觉得Post和文件上传 ...

  4. Spring MVC环境中的文件上传功能实现

    在实际开发过程中,尤其是web项目开发,文件上传和下载的需求的功能非常场景,比如说用户头像.商品图片.邮件附件等等.其实文件上传下载的本质都是通过流的形式进行读写操作,而在开发中不同的框架都会对文件上 ...

  5. php用ajaxs上传图片_php+ajax实现图片文件上传功能实例

    目前常用的异步文件上传功能有几种,比较多见的如使用iframe框架形式,ajax功能效果,以及flash+php功能,下面介绍ajax与iframe实现异步文件上传的功能的例子. 方法一,利用jque ...

  6. Java文件上传功能代码 —— 普遍适用

    版权声明:本文为博主原创文章,如需转载,请标明出处. https://blog.csdn.net/alan_liuyue/article/details/72782207 一. 前言   通过之前的博 ...

  7. query AjaxUpload实现多文件上传功能代码实例教程

    在PHP网站开发中,文件上传功能时常用到,之前我已介绍过如何利用PHP实现文件上传功能.随着WEB技术的发展,用户体验成为衡量网站成功与否的关键,今天和大家分享如何在PHP中利用Jquery实现Aja ...

  8. 学习ASP.NET Core Razor 编程系列十三——文件上传功能(一)

    原文:学习ASP.NET Core Razor 编程系列十三--文件上传功能(一) 学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习A ...

  9. springboot util 测试类怎么写_SpringBoot入门建站全系列(九)文件上传功能与下载方式...

    SpringBoot入门建站全系列(九)文件上传功能与下载方式 Spring对文件上传做了简单的封装,就是用MultipartFile这个对象去接收文件,当然有很多种写法,下面会一一介绍. 文件的下载 ...

最新文章

  1. Best Time to Buy and Sell Stock II
  2. ② DataGridView 设定单元格只读
  3. C 语言获取系统时间
  4. Leetcode 876. 链表的中间结点 (每日一题 20210918)
  5. 洛谷 P4026 [SHOI2008]循环的债务
  6. php 弹出保存对话框,如何在不将页面留在PHP中的情况下强制保存为对话框?
  7. 大学毕业10年,同学之间的差距是怎样拉开的?答案很现实!
  8. 【Linux】kali linux 安装 google chrome
  9. 再论sklearn分类器
  10. 在小程序中使用百度地图
  11. java jdbc 下载_java jdbc驱动 下载
  12. 计算机文本自定义,自定义文本编辑器
  13. 中文字体库转换成16X16点阵 另外附上ASCII码转换8X16点阵
  14. Matlab中的ttest2()函数实现
  15. 1000亿资本“壕掷”!乡村旅游迎来黄金时代?
  16. 为什么很多单片机的工作电压是5v?
  17. el-progress入门学习
  18. 国美易卡依托大数据平台提供便捷服务
  19. NUIST第十一届程序设计竞赛
  20. 造车新势力平均月薪 15367 元,自动驾驶算法岗年薪百万

热门文章

  1. Presto (二) --------- Presto 安装
  2. 组合总和 Ⅳ(超详细讲解)
  3. 诛仙很热,阅文集团的IP产业很冷
  4. python输入一个英文句子、求其中最长的单词的changd_数组练习
  5. python层次分析法一致性检验+权重计算
  6. 数电快速入门(二)(复合逻辑运算和逻辑代数的基本定律的介绍)
  7. 解读智慧农业未来发展
  8. python刷火车票脚本_使用python脚本实现查询火车票工具
  9. ajaxfileupload上传 拒绝访问
  10. (感悟)你能看到火柴盒的几个面?