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

2023.11.17使用flask将多个图片文件上传至服务器

2023.11.17使用flask将多个图片文件上传至服务器

实现功能:
1、同时上传多个图片文件
2、验证文件扩展名
3、显示上传文件的文件名
4、显示文件上传结果
在这里插入图片描述
程序结构
在这里插入图片描述
main.py

from flask import Flask, request, jsonify, render_template
import osapp = Flask(__name__)# 设置上传文件存储目录
UPLOAD_FOLDER = 'uploads'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER# 允许上传的文件类型
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'}@app.route('/')
def index():return render_template('index.html')# 检查文件名是否合法
def allowed_file(filename):return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS# 处理文件上传
@app.route('/upload', methods=['POST'])
def upload_file():files = request.files.getlist("file")success_files = []failed_files = []for file in files:if file and allowed_file(file.filename):filename = file.filenamefile.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))success_files.append(filename)else:failed_files.append(file.filename)if failed_files:return jsonify({'message': '部分文件上传失败', 'failed_files': failed_files})else:return jsonify({'message': '所有文件上传成功', 'success_files': success_files})if __name__ == '__main__':app.run(debug=True)

index.html

<!DOCTYPE html>
<html>
<head><title>文件上传</title><link href="https://cdn.staticfile.org/twitter-bootstrap/5.1.1/css/bootstrap.min.css" rel="stylesheet"><script src="https://cdn.staticfile.org/twitter-bootstrap/5.1.1/js/bootstrap.bundle.min.js"></script>
</head>
<body><div class="container"><h1 class="mt-5 mb-4">文件上传</h1><form id="upload-form" action="/upload" method="post" enctype="multipart/form-data"><div class="custom-file mb-3"><input type="file" class="custom-file-input" id="fileInput" name="file" multiple><label class="custom-file-label" for="fileInput">选择文件</label></div><button type="submit" class="btn btn-primary">上传</button></form><div id="result" class="mt-3"></div></div><script>document.getElementById('upload-form').addEventListener('submit', function(e) {e.preventDefault();var formData = new FormData(this);fetch('/upload', {method: 'POST',body: formData}).then(response => response.json()).then(data => {if (data.failed_files) {document.getElementById('result').innerHTML = '<div class="alert alert-danger" role="alert">部分文件上传失败: ' + data.failed_files.join(', ') + '</div>';} else {document.getElementById('result').innerHTML = '<div class="alert alert-success" role="alert">' + data.message + '</div>';}}).catch(error => {console.error(error);});});// 更新文件选择框显示已选择的文件名document.getElementById('fileInput').addEventListener('change', function () {var files = this.files;var label = "";for (var i = 0; i < files.length; i++) {label += files[i].name + ', ';}// /,$/ 表示匹配以逗号结尾的部分。即将最后一个逗号清除label = label.replace(/, $/, "");this.nextElementSibling.innerText = label;});</script>
</body>
</html>
http://www.lryc.cn/news/236147.html

相关文章:

  • 母婴服务预约小程序的效果如何
  • Flask实现cookie 开发
  • 2311rust,到60版本更新
  • 【开源】基于Vue和SpringBoot的微信小程序的音乐平台
  • adb手机调试常用命令
  • IDEA常用插件合集
  • 【算法】滑动窗口题单——2.不定长滑动窗口(求最长/最大)
  • 电子学会C/C++编程等级考试2022年03月(一级)真题解析
  • Libvirt-Qemu-Kvm 操作手记
  • 代码随想录算法训练营第二十八天| 78 子集 90 子集|| 93 复原IP地址
  • 9 HDFS架构剖析
  • Python中的迭代器、生成器和装饰器
  • 【NGINX--1】基础知识
  • 小米路由器AX1800降级后的SSH登录和关墙等命令
  • 5-什么是猴子补丁,有什么用途?什么是反射,python中如何使用反射?http和https的区别?
  • 深信服AC应用控制技术
  • 全新云开发工具箱:融合多项功能的微信小程序源码解决方案
  • Android跨进程通信,IPC,RPC,Binder系统,C语言应用层调用
  • 数据结构【DS】栈
  • 提高视频性能的 5 种方法
  • python有哪些高级的技术
  • 系列五、怎么查看默认的垃圾收集器是哪个?
  • 用向量数据库Milvus Cloud搭建GPT大模型+私有知识库的定制AI助手——PPT大纲助手
  • 浅谈基于云计算的环境智能监控系统
  • 向量机SVM代码实现
  • 基于STC12C5A60S2系列1T 8051单片的模数芯片ADC0809实现模数转换应用
  • 16. @PostConstruct注解和开关原理(验证码开关、IP开关)
  • uniapp+vue+Springboot 公司网站0~1搭建 前端前期设计篇
  • MFC 对话框
  • 关于node安装和nvm安装的问题