构建个人文件上传服务:Python Flask实现上传和下载完整指南

介绍

在本教程中,我们将学习如何使用Python Flask框架将文件上传到服务器,并使用SQLite数据库来跟踪上传的文件。我们将提供后端代码和一个示例项目的Git链接,以便您可以轻松地跟随本教程。

准备工作

首先,您需要安装Python和Flask框架。您可以按照Flask官方文档上的说明进行安装

pip install flask

项目结构

我们的项目包含以下文件:

  • app.py:包含Flask应用程序的后端代码
  • file_mapping.db:SQLite数据库文件,用于跟踪上传的文件
  • uploads文件夹:用于存储上传的文件

代码解释

import os
import uuid
import sqlite3
from flask import Flask, request, send_from_directory, render_templateapp = Flask(__name__)
UPLOAD_FOLDER = 'uploads'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
app.config['MAX_CONTENT_LENGTH'] = 100 * 1024 * 1024  # 设置最大文件上传大小为 100MB# 创建保存文件的目录
if not os.path.exists(UPLOAD_FOLDER):os.makedirs(UPLOAD_FOLDER)# 初始化数据库
conn = sqlite3.connect('file_mapping.db')
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS files(id INTEGER PRIMARY KEY, original_filename TEXT, new_filename TEXT)''')
conn.commit()
conn.close()@app.route('/')
def index():return render_template("Upload.html")@app.route('/upload', methods=['POST'])
def upload_file():if request.method == 'POST':if 'folder' not in request.files:return 'No folder part'folder = request.files.getlist('folder')try:conn = sqlite3.connect('file_mapping.db')# noinspection PyShadowingNamesc = conn.cursor()for file in folder:if file.filename == '':return '没有选择文件'if file:original_filename = file.filename# 查询数据库,检查文件名是否已经存在c.execute("SELECT id FROM files WHERE original_filename=?", (original_filename,))existing_file = c.fetchone()if existing_file:continueelse:# 生成唯一的文件名new_filename = str(uuid.uuid4()) + os.path.splitext(original_filename)[1]file_path = os.path.join(app.config['UPLOAD_FOLDER'], new_filename)file.save(file_path)# 存储原始文件名和新文件名的关联关系到数据库c.execute("INSERT INTO files (original_filename, new_filename) VALUES (?, ?)",(original_filename, new_filename))conn.commit()return '文件上传完成'except Exception as e:return '文件上载过程中出错: {}'.format(str(e))finally:conn.close()else:return '请求方法不允许'@app.route('/list_files', methods=['GET'])
def list_files():conn = sqlite3.connect('file_mapping.db')c = conn.cursor()c.execute("SELECT original_filename, new_filename FROM files")files = c.fetchall()conn.close()return render_template('Review.html', files=files)@app.route('/download/<filename>')
def download_file(filename):return send_from_directory(app.config['UPLOAD_FOLDER'], filename, as_attachment=True)if __name__ == '__main__':app.run(host='0.0.0.0', port=5001, debug=True)

上传文件

我们使用upload_file函数来处理文件上传。在这个函数中,我们首先检查请求中是否存在文件,然后逐个处理上传的文件。对于每个文件,我们检查数据库中是否已经存在相同的文件名,如果不存在,则生成一个新的唯一文件名,并将文件保存到服务器的uploads文件夹中。

查看和下载文件

我们可以使用list_files函数来查看已上传的文件列表,并使用download_file函数来下载特定文件。

截图

获取示例项目

您可以从以下Git链接中获取完整的示例项目:file-upload.git

结论

通过本教程,您将学会如何使用Python Flask框架将文件上传到服务器,并使用SQLite数据库来管理上传的文件。希望本教程对您有所帮助!

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

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

相关文章

太爱这种数据可视化效果,零售行业的都看过来

在当今数字化浪潮下&#xff0c;数据可视化已成为零售行业洞察市场趋势、优化运营决策的关键技术。奥威BI零售数据分析方案凭借其卓越的数据可视化效果&#xff0c;成为零售企业的得力助手。接下来就通过BI节假日分析报表来简单地感受一下。 注&#xff1a;该BI节假日分析报表…

网络安全突发事件应急预案

1.总则 1.1 编制目的 建立健全网络安全突发事件应急组织体系和工作机制&#xff0c;提高网络安全突发事件综合应对能力&#xff0c;确保及时有效地控制、减轻和消除网络安全突发事件造成的社会危害和损失&#xff0c;保证持续稳定运行和数据安全。 1.2 编制依据 …

新版本vue-cli打包之后没有css文件

新版本vue-cli打包之后没有css文件 vueCli配置文档 将css.extract 设置为 true就可以了 module.exports {css: {extract: true} }

chromadb

https://www.trychroma.com/ https://docs.trychroma.com/getting-started chroma 向量数据库使用教程 ChromaDB python 使用教程及记录 向量数据库检索原理 向量数据库FAISS/Chromadb/ES/milvus简单概述

adb指令切换cpu工作状态至性能模式

adb 指令 adb root adb wait-for-device adb remount adb wait-for-device adb shell "setprop persist.sys.enable.hypnus 0" adb shell "rmmod hypnus" adb shell "cat /sys/devices/system/cpu/cpu*/online" adb shell stop mpdecision adb …

oracle-定时器(job)

--1分钟运行一次定时任务。sysdate为了定时任务即可生效。 DECLARE JOB NUMBER; BEGIN DBMS_JOB.SUBMIT(JOB,P_HJZ_HJZ_PJ_DDYTKAPB_INIT_JOB;,SYSDATE,sysdate1/24/60); COMMIT; END; / select * from user_jobs; --删除 begin DBMS_JOB.broken (462, false); DBM…

java读取大文件报错

报错如下&#xff1a; java.io.IOException: Zip bomb detected! The file would exceed the max. ratio of compressed file size to the size of the expanded data. This may indicate that the file is used to inflate memory usage and thus could pose a security risk…

DDMA信号处理以及数据处理的流程---cfar检测

Hello,大家好,我是Xiaojie,好久不见,欢迎大家能够和Xiaojie一起学习毫米波雷达知识,Xiaojie准备连载一个系列的文章—DDMA信号处理以及数据处理的流程,本系列文章将从目标生成、信号仿真、测距、测速、cfar检测、测角、目标聚类、目标跟踪这几个模块逐步介绍,这个系列的…

Nacos安装教程(很细很简单),解决启动报错Please set the JAVA_HOME

nacos安装 找到你要下载的版本解压到任意非中文目录下端口默认8848&#xff0c;如有端口冲突&#xff0c;可修改配置文件中的端口。编辑shutdown.cmd文件&#xff0c;路径换成你的jdk安装地址否则会报错Please set the JAVA_HOME variable in your environment, We need java(x…

安卓应用开发——Android Studio中通过id进行约束布局

在Android开发中&#xff0c;布局通常使用XML文件来描述&#xff0c;而约束&#xff08;如相对位置、大小等&#xff09;可以通过多种方式实现&#xff0c;但直接使用ID进行约束并不直接对应于Android的传统布局系统&#xff08;如LinearLayout、RelativeLayout等&#xff09;。…

Manim本地安装

目录 背景Manim安装及配置一个上手例子参考文献 背景 通过上一期的介绍&#xff0c;我们对Manim有了初步的认识也知道Manim版本的区别&#xff0c;这一期&#xff0c;我们来给自己的计算机安装一个社区版ManimCE&#xff0c;方便以后玩Manim。笔者的硬件配置是联想笔记本Windo…

机器学习:人工智能的子领域之一

引言 人工智能&#xff08;AI&#xff09;已经成为现代科技的重要组成部分&#xff0c;推动了许多领域的创新与进步。在人工智能的诸多子领域中&#xff0c;机器学习&#xff08;ML&#xff09;无疑是最关键和最具影响力的一个。机器学习通过自动分析和学习数据中的模式&#x…

JavaScript的学习之强制类型转换

目录 一、什么是强制类型转换 二、其他类型转化为String类型 方式一&#xff1a;调用被转化数据类型的toString()方法 方式二&#xff1a;调用String函数&#xff0c;并将我们要转换的数据添加进去为参数 三、其他类型转化为Number类型 方式一&#xff1a;使用Number()函数…

web前端JS高阶面试题

问题2: 循环引用会出错 / export function deepClone1(target) { return JSON.parse(JSON.stringify(target)) } / 获取数据的类型字符串名 / function getType(data) { return Object.prototype.toString.call(data).slice(8, -1) } / 2). 面试基础版本 解决问题1: 函数属性还…

环境配置04:Pytorch下载安装

说明&#xff1a; 显存大于4G的建议使用GPU版本的pytorch&#xff0c;低于4G建议使用CPU版本pytorch&#xff0c;直接使用命令安装对应版本即可 GPU版本的pytorch的使用需要显卡支持&#xff0c;需要先安装CUDA&#xff0c;即需要完成以下安装 1.查看已安装CUDA版本 GPU对应…

常见的结构型设计模式

设计模式&#xff08;二&#xff09; 常见的结构型模式 1.代理模式: 提供一种代理方法 &#xff0c;来控制对其他对象的访问。在有些情况下&#xff0c;一个对象不能或者不适合直接访问另一个对象&#xff0c;而代理对象可以在这两个类之间起一个中介的作用。 举例&#xf…

Docker容器基础知识,即linux日常运维命令

Docker 是一个流行的用 Go 语言开发的开源项目&#xff0c;基于Linux内核的cgroup、namespace及 AUFS 等技术&#xff0c;对进程进行封装隔离&#xff0c;由 Dotcloud 公司开发。Docker已成为容器行业的事实标准。 小陈发现一个有趣的事情&#xff0c;容器的英文是Container&am…

甘肃的千层烤馍:传统面点的魅力绽放

千层烤馍&#xff0c;作为甘肃美食文化的重要象征&#xff0c;以其独特的外形和丰富的口感&#xff0c;吸引着众多食客。它的外观犹如一件精美的艺术品&#xff0c;层层叠叠&#xff0c;金黄酥脆&#xff0c;散发着诱人的香气。 在甘肃平凉地区制作千层烤馍&#xff0c…

国内大模型/智能体盘点丨16家公司,13款大模型,19个智能体

在当今这个智能化风起云涌的时代&#xff0c;随着人工智能技术的飞速发展&#xff0c;大模型&#xff08;Large Language Models&#xff09;作为推动行业变革的关键力量&#xff0c;正逐步渗透到社会经济的各个角落。 从科技创新的最前沿到日常生活应用的细微之处&#xff0c…

相交链表--力扣160

相交链表 题目思路C代码 题目 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 思路 求两个链表的相交结点&#xff0c;使用…