当前位置: 首页 > news >正文

Python-FLASK上传文件

一、HTML文件

1、avator.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<form method="post" enctype="multipart/form-data" action="upload"><input type="file" name="avator" id="avator" /><input type="submit" name="save" id="save" />
</form>
</body>
</html>

1、upload.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>上传成功</title>
</head>
文件名:{{ myfile }}
<p>你的头像上传成功!</p>
<img width="80px" src="/static/image/{{ myfile }}" />
</body>
</html>二、上传文件
  1. file = request.files['avator']

    • request.files 是一个特殊的字典对象,用于存储通过HTTP请求上传到Flask应用程序的文件。
    • 'avator' 是请求中表单字段的名称。在HTML表单中,有一个这样的文件输入:<input type="file" name="avator">。这里的name属性值就是'avator'
    • request.files['avator'] 返回一个Werkzeug的FileStorage对象,该对象表示用户上传的文件。这个对象包含了文件的内容及其相关信息,比如文件名。
  2. file.save(...):

    • file 变量此时是一个FileStorage对象,包含了上传文件的所有信息。
    • file.save(...) 是FileStorage对象的方法,用于将上传的文件保存到服务器的文件系统中。save()方法的参数是你希望文件被保存在服务器上的路径。

因此,在这两行代码中,file是一个变量名,用于引用FileStorage对象。file承载了上传的文件数据,并提供了一些方法(如save)用于处理文件,比如将其保存到磁盘。

@app.route('/upload', methods=['POST'])
def upload():file = request.files['avator']myfilename=file.filenamefile.save('static/image/'+myfilename)return render_template('upload.html', myfile=myfilename)

还可以这样写:

@app.route('/upload', methods=['POST'])

def upload():

file = request.files['file']

file_name = file.filename

file_path = os.path.join('path/to/save/file/', file_name)

file.save(file_path)

return render_template('upload.html', myfile=myfilename)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • VScode 使用记录
  • 风机设计基础
  • 校园失物招领系统小程序的设计
  • 基于xr-frame实现微信小程序的人脸识别3D模型叠加AR功能(含源码)
  • 射频放大管的使用简略
  • vite创建的vue项目怎么使用jsx来实现elementPlus表格表尾的合计有多行大的方法
  • @antv/g6 业务场景:流程图
  • 线性表之栈
  • python无法连接SQL SERVER问题解决
  • fedora siliverblue adb
  • python---爬取QQ音乐
  • python办公自动化:使用`Python-PPTX`自动化与批量处理
  • 防御网站数据爬取:策略与实践
  • [手机Linux PostmarketOS]六, mySQL安装和使用
  • 关于谷歌账号的三个“错误的”问题:谷歌有客服吗?登录不了的账号如何注销?登录不了的账号绑定的手机还能注册新账号吗?
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • EventListener原理
  • iOS编译提示和导航提示
  • JS 面试题总结
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • node入门
  • Octave 入门
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 浮动相关
  • 延迟脚本的方式
  • 正则表达式小结
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • ​浅谈 Linux 中的 core dump 分析方法
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (1)(1.11) SiK Radio v2(一)
  • (zhuan) 一些RL的文献(及笔记)
  • (不用互三)AI绘画:科技赋能艺术的崭新时代
  • (剑指Offer)面试题34:丑数
  • (十八)三元表达式和列表解析
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (轉)JSON.stringify 语法实例讲解
  • .NET 8 跨平台高性能边缘采集网关
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .NET/C#⾯试题汇总系列:集合、异常、泛型、LINQ、委托、EF!(完整版)
  • .net反混淆脱壳工具de4dot的使用
  • .net中我喜欢的两种验证码
  • @GetMapping和@RequestMapping的区别
  • @Transactional事务注解内含乾坤?
  • [ 云计算 | AWS 实践 ] 基于 Amazon S3 协议搭建个人云存储服务
  • [Android]How to use FFmpeg to decode Android f...
  • [BJDCTF2020]EzPHP1
  • [C/C++]数据结构 深入挖掘环形链表问题
  • [C++]指针与结构体
  • [C++初阶]vector的初步理解
  • [CakePHP] 在Controller中使用Helper