一周学会Django5 Python Web开发-Django5文件上传实现

锋哥原创的Python Web开发 Django5视频教程:

2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计26条视频,包括:2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~、第2讲 Django5安装、第3讲 Django5创建项目(用命令方式)等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV14Z421z78C/文件上传功能是网站开发或者业务系统常见的功能之一,比如上传图片(用户头像或文章配图)和导入文件(压缩包,视频,音乐)。无论上传的文件是什么格式的,其上传原理都是将文件以二进制的数据格式读取并写入网站或者业务系统指定的目录里。

我们通过一个实例来深入体验学习下文件上传:

首先templates下新建upload.html ,前端上传文件模版页面

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

views.py里定义to_upload和upload两个方法,分别是跳转文件页面,和文件上传处理

def to_upload(request):"""跳转文件上传页面:param request::return:"""return render(request, 'upload.html')def upload(request):"""文件上传:param request::return:"""# 获取上传的文件,如果没有文件,就默认为NonemyFile = request.FILES.get("myfile", None)if myFile:# 打开特定的文件进行二进制的写操作f = open(os.path.join("D:\\myFile", myFile.name), "wb+")# 分块写入文件for chunk in myFile.chunks():f.write(chunk)f.close()return HttpResponse("文件上传成功!")else:return HttpResponse("没发现文件!")

最后urls.py里,定义下映射:

    path('toUpload/', helloWorld.views.to_upload),path('upload', helloWorld.views.upload)

运行测试:浏览器输入 http://127.0.0.1:8000/toUpload/,进入文件上传页面:

测试两个文件,一个压缩包,一个图片,选择文件,点击上传文件,则上传到指定目录:

文件对象myFile提供一下属性来获取文件信息:

  • myFile.name:获取上传文件的文件名,包含文件后缀名。

  • myFile.size:获取上传文件的文件大小。

  • myFile.content_type:获取文件类型,通过后续名判断文件类型。

从文件对象myFile获取文件内容,Django提供了以下读取方式,每种方式说明如下。

  • myFile.read():从文件对象里读取整个文件上传的数据,这个方法只适合小文件。

  • myFile.chunks():按流式响应方式读取文件,在for 循环中进行迭代,将大文件分块写入服务器所指定的保存位置。

  • myFile.multiple_chunks():判断文件对象的文件大小,返回True或者False,当文件大于2.5MB(默认值为2.5MB)时,该方法返回True,否则返回False。因此,可以根据该方法来选择选用read方法读取还是采用chunks方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/492589.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

邀请函 | 2024年数据技术嘉年华集结号已吹响,期待您参会!

龙腾四海内&#xff0c;风云际会时&#xff0c;2024年中国数据嘉年华如约而至。从起初小范围的网友聚会&#xff0c;到如今面向全国各地从业者、爱好者的年度集会&#xff0c;纵使岁月更迭&#xff0c;我们初心依旧。我们在各自最好的年华里共同见证了中国数据库行业的蓬勃发展…

NLP 使用Word2vec实现文本分类

&#x1f368; 本文为[&#x1f517;365天深度学习训练营学习记录博客 &#x1f366; 参考文章&#xff1a;365天深度学习训练营 &#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制]\n&#x1f680; 文章来源&#xff1a;[K同学的学习圈子](https://www.yuque.com/…

浅谈门级驱动电压对IGBT性能的影响

绝缘门极双极型晶体管&#xff08;IGBT&#xff09;是复合了功率场效应管和电力晶体管的优点而产生的一种新型复合器件&#xff0c;具有输入阻抗高、工作速度快、热稳定性好、驱动电路简单、饱和压降低、耐压高电流大等优点&#xff0c;因此现今应用相当广泛。但是IGBT良好特性…

TypeScrip遍历对象报错问题

解决TypeScrip遍历对象报错问题 文章目录 解决TypeScrip遍历对象报错问题声明接口&#xff0c;遍历对象报错解决方式keyof给对象声明一个接口泛型as anyas any 声明接口&#xff0c;遍历对象报错 interface DEPT {name: string;age: number,[key: string]: any }解决方式 // 用…

【C#】获取文本中的链接,通过正则表达式的方法获取以及优化兼容多种格式

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是《C#》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌握。…

邮件营销神器Focussend,轻松实现1美元转化72美元的营销高回报!

随着社交媒体营销逐渐成为主流&#xff0c;一家名为Focussend的公司却在邮件营销领域崭露头角。成立于2009年&#xff0c;Focussend经过尝试综合营销后&#xff0c;选择进入古早但高回报的邮件营销市场。目前&#xff0c;该公司在跨境平台中排名靠前&#xff0c;服务着上万名中…

项目管理基本要素--项目、项目集、项目组合

本文描述从事项目管理和了解项目管理领域所需的基本要素&#xff0c;词汇定义来自于《项目知识管理体系》(PMBOK指南)第六版&#xff0c;仅作个人学习使用&#xff0c;任何对此文章的引用&#xff0c;应当说明源出处&#xff0c;不得用于商业用途。 如有侵权、联系速删 文章目录…

Linux Debian12安装fcitx5中文拼音输入法

&#xfeff;我使用Debian系统已经4年了&#xff0c;我常在Debian系统上安装ibus google拼音输入法&#xff0c;但是有时这个输入法会卡死&#xff0c;停上几分钟后又恢复正常了&#xff0c;经常被这个困扰。不过在Debian 11或Debian12中我们可以使用fcitx5中文拼音输入法了&am…

用c# 自己封装的Modbus工具类库源码

前言 Modbus通讯协议在工控行业的应用是很多的&#xff0c;并且也是上位机开发的基本技能之一。相关的类库也很多也很好用。以前只负责用&#xff0c;对其并没有深入学习和了解。前段时间有点空就在这块挖了挖。想做到知其然还要知其所以然。所以就有了自己封装的Modbus工具类库…

linux僵尸进程

僵尸进程&#xff08;Zombie Process&#xff09;是指在一个进程终止时&#xff0c;其父进程尚未调用wait()或waitpid()函数来获取该进程的终止状态信息&#xff0c;导致进程的资源&#xff08;如进程表中的记录&#xff09;仍然保留在系统中的一种状态。 当一个进程结束时&am…

SpreadJS+vue3练手使用

SpreadJS的练手使用 // 首先在 package.json 这个文件里{"name": "app-admin","private": true,"version": "0.0.0","type": "module","scripts": {"dev": "vite",&quo…