一、定义

用户可以通过浏览器将图片等文件传至网站

二、场景

  • 用户上传头像
  • 上传流程性的文档[pdf,txt等]

三、上传规范 - 前端【HTML】

  • 文件上传必须为POST提交方式
  • 表单<form>中文件上传时必须有带有enctype = "multipart/formdata"时才会包含文件内容数据
  • 表单中用<input type="file" name="xxx">标签上传文件
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>上传文件</title>
</head>
<body>
<form action="/test_upload" method="post" enctype="multipart/form-data"><p><input type="text" name="title"></p><p><input type="file" name="file"></p><p><input type="submit" value="上传"></p>
</form>
</body>
</html>

四、上传规范 - 后端【Django】

4.1. 获取内容

视图函数中,用request.FILES取文件框的内容

file = request.FILES['xxx']

说明:

  1. FILES的key对应页面中file框的name值
  2. file绑定文件流对象
  3. file.name文件名
  4. file.file文件的字节流数据

4.2. 配置路径

配置文件的访问路径和存储路径

在setting.py中设置MEDIA相关配置

Django把用户上传的文件,统称为media资源

# file : setting.py
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

4.3. 绑定路径

MEDIA_URL和MEDIA_ROOT需要手动绑定

步骤:主路由中添加路由

from django.conf import settings
from django.conf.urls.static import staticurlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

说明:等价于做了MEDIA_URL开头的路由,Django接到该特征请求后去MEDIA_ROOT路径查找资源

五、文件写入方案

5.1. 传统的open方式

@csrf_exempt
def upload_view(request):if request.method == 'GET':return render(request, 'test_upload.html')elif request.method == 'POST':# 取文件数据a_file = request.FILES['file']print("上传文件名是:", a_file.name)# 拼接存储绝对路径filename = os.path.join(settings.MEDIA_ROOT, a_file.name)with open(filename, 'wb') as f:# a_file.file 文件数据# a_file.file.read() 读出来data = a_file.file.read()f.write(data)return HttpResponse("接收文件:" + a_file.name + "成功")

5.2. 优化 - 借助ORM

借助M层,在数据库中搞一个字段,字段不存储文件本身,字段用来存储文件相对路径,

字段:FileFieId(upload = '子目录名')

def test_upload(request):if request.method == 'GET':return render(request, 'test_upload.html')elif request.method == 'POST':title = request.POST['title']file = request.FILES['file']Content.objects.create(title=title, file=file)return HttpResponse("upload is ok")

测试:

  1. 创建应用

    $ python3 manage.py startapp upload_app
    

  2. 注册应用

  3. 数据模型

  4. 迁移

  5. 视图函数

    def test_upload(request):if request.method == 'GET':return render(request, 'test_upload.html')elif request.method == 'POST':title = request.POST['title']file = request.FILES['file']Content.objects.create(title=title, picture=file)return HttpResponse("upload is ok")
    

  6. 界面

    <!DOCTYPE html>
    <html lang="en">
    <head><meta charset="UTF-8"><title>上传文件</title>
    </head>
    <body>
    <form action="/test_upload" method="post" enctype="multipart/form-data">{% csrf_token %}<p><input type="text" name="title"></p><p><input type="file" name="file"></p><p><input type="submit" value="上传"></p>
    </form>
    </body>
    </html>
    

  7. 路由

    path('test_upload', views.test_upload),
    

  8. 上传后,media目录下生成picture文件夹,上传的文件在内部

  9. 且数据库字段也保存路径

  10. 如果上传同一名称的图片,会自动添加后缀保存

22. Django进阶:文件上传相关推荐

  1. Django(part47)--文件上传

    学习笔记,仅供参考 文件上传 上传须知 文件上传必须为POST提交方式,在文件上传时,表单<form>中必须有带有enctype="multipart/form-data&quo ...

  2. django媒体文件上传设置

    setting.py STATIC_URL = '/static/' STATICFILES_DIRS=(os.path.join(BASE_DIR,"static"), ) ME ...

  3. 22.WEB漏洞-文件上传之内容逻辑数组绕过与解析漏洞

    本文参考: https://www.cnblogs.com/zhengna/p/15624867.html 加上自己的实验笔记 知识点 文件头检测 图像文件信息判断 逻辑安全-二次渲染 逻辑安全-条件 ...

  4. 【Django】文件上传以及celery的使用

    上传文件.异步.初始化脚本 面试题: 项目中的静态文件处理(JS/CSS/image) 自己在机房内优化的方法:1. Nginx/lighttpd(lighty-douban):Nginx 处理静态资 ...

  5. 基于Django的文件上传下载删除管理器

    这是一个基于Django的文件下载,上传,删除的任务管理器 先看看效果展示 1.运行完Django后,直接输入网址http://127.0.0.1:8000 就可以直接进去该网站 2.这是一个主图 上 ...

  6. django ajax文件上传,django 之 ajax 篇 上传文件

    前段: Title {% csrf_token %} 输入正确 ajax上传文件(前段): {% load static %} Title {% csrf_token %} {# #} 输入正确 头像 ...

  7. django上传文件到服务器,如何用django将文件上传到服务器?

    我已经为我的问题找到了this very simple code,但我试图在我的项目中重复它,但没有结果. 我认为我做的每件事都是正确的,但结果很糟糕.在 我这样做: 在表单.py在class Upl ...

  8. Django实现任意文件上传(最简单的方法)

    利用Django实现文件上传并且保存到指定路径下,其实并不困难,完全不需要用到django的forms,也不需要django的models,就可以实现,下面开始实现. 第一步:在模板文件中,创建一个f ...

  9. django 1.8 官方文档翻译: 3-3-1 文件上传

    文件上传 当Django在处理文件上传的时候,文件数据被保存在request. FILES (更多关于 request 对象的信息 请查看 请求和响应对象).这篇文档阐述了文件如何上传到内存和硬盘,以 ...

  10. Django的边边角角(一):模型继承、静态资源、文件上传

    文章目录 一.模型继承 1.概述 2.模型创建 二.静态资源 1.静态资源和模板的区别 2.注意 三.文件上传 1.源码实现 2.Django文件上传 3.显示图片 一.模型继承 1.概述 默认一个模 ...

最新文章

  1. 前端项目课程3 jquery1.8.3到1.11.1有了哪些新改变
  2. yii2.0错误:Exception yii\base\InvalidConfigException with message
  3. Splunk高管:中国才有真正意义的大数据
  4. 反射机制2,Class类的使用
  5. python病毒usb文件自动安装_win7禁USB自动安装驱动功能避免木马病毒入侵
  6. python 数据库驱动开发实例_Python驱动概述
  7. JDK 1.8 - 1.7
  8. 晶振为什么不封装进芯片内部?
  9. Java 爱的循环_郁金花海 Tulip Sea in Love Loop
  10. android画板的实验报告,几何画板实验报告
  11. centOS安装yasm
  12. 浏览器在线视频播放加速方法——直接修改网页代码实现加速
  13. python引入视频_django 实现简单的插入视频
  14. Matlab下地形图绘图包m_map绘制晕渲(shaded relief)地形图
  15. PDF时间戳数字签名
  16. 2019下半年的教师资格考试~学霸大佬们总结的记忆口诀涨分必备
  17. Hive中的in、exists和left semi join
  18. web-sso 系统集成 单点登录
  19. C语言--“.”与“-”有什么区别?
  20. 第三方微信+支付宝个人免签支付源码

热门文章

  1. 12.RabbitMQ实战 --- 聪明的Rabbit:扩展RabbitMQ
  2. 25.Yii2 自动加载
  3. 40. MySQL的权限与安全
  4. css中属性选择器用法总结c
  5. php中字符串与数组的相互转化explode(separator,$str)与implode(separator,$arr)
  6. 这是一个定时器,定时执行一次,用在定时发送邮件
  7. Hibdernate入门
  8. matlab sparse()
  9. HDU2066--一个人的旅行(Dijkstra)
  10. 网页编辑器粘贴word格式的处理