构建个人文件上传服务: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节假日分析报表…

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…

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()函数…

环境配置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;使用…

ATFX汇市:瑞士央行连续第二次降息,USDCHF猛涨

ATFX汇市&#xff1a;昨日15:30&#xff0c;瑞士央行公布利率决议结果&#xff0c;将政策利率下调0.25个百分点&#xff0c;至1.25%。瑞士央行在政策声明中提到&#xff1a;与上一季度相比&#xff0c;潜在的通胀压力再次下降&#xff1b;瑞士目前的通货膨胀主要是由国内服务价…

成都晨持绪:现在的抖音网店怎么做更快起店

在当今社交媒体的浪潮中&#xff0c;抖音已经成为一个不可忽视的电商平台。对于想要快速起步的抖音网店来说&#xff0c;掌握一些关键策略至关重要。 首要的是定位清晰。你的网店需要有一个鲜明的主题&#xff0c;这可以是某一特定领域的产品&#xff0c;如美妆、服饰或是手工艺…

【C语言】解决C语言报错:Use-After-Free

文章目录 简介什么是Use-After-FreeUse-After-Free的常见原因如何检测和调试Use-After-Free解决Use-After-Free的最佳实践详细实例解析示例1&#xff1a;释放内存后未将指针置为NULL示例2&#xff1a;多次释放同一指针示例3&#xff1a;全局或静态指针被释放后继续使用示例4&am…

力扣1793.好子数组的最大分数

力扣1793.好子数组的最大分数 对于每个数 求其左右两侧小于它高度的元素下标(单调栈) class Solution {public:int maximumScore(vector<int>& nums, int k) {int n nums.size();vector<int> left(n,-1);stack<int> st;for(int i0;i<n;i){while(!…

一文读懂过零检测电路的作用、电路原理图及应用

过零检测电路是一种常见的应用&#xff0c;其中运算放大器用作比较器。它通常用于跟踪正弦波形的变化&#xff0c;例如过零电压从正到负或从负到正。它还可以用作方波发生器。过零检测电路有许多应用&#xff0c;例如标记信号发生器、相位计和频率计。#过零检测电路#可以采用多…

我的python-web基础(Flask前后端不分类)

1.HTML HTML是超文本标记语言 &#xff08; 英文 &#xff1a; HyperText Markup Language &#xff0c; HTML &#xff09;&#xff0c;它不是编程语言&#xff0c;而是一种标记语言 HTML标记标签通常被称为HTML标签&#xff0c;它的特点如下&#xff1a; HTML标签是由尖括…

最火AI角色扮演流量已达谷歌搜索20%!每秒处理2万推理请求,Transformer作者公开优化秘诀

卡奥斯智能交互引擎是卡奥斯基于海尔近40年工业生产经验积累和卡奥斯7年工业互联网平台建设的最佳实践&#xff0c;基于大语言模型和RAG技术&#xff0c;集合海量工业领域生态资源方优质产品和知识服务&#xff0c;旨在通过智能搜索、连续交互&#xff0c;实时生成个性化的内容…

Qt制作程序启动界面类QSplashScreen实例测试详解

目录 一、QSplashScreen的概述 二、QSplashScreen静态图片加载 1、主程序实现 2、mainwindow.h实现 3、mainwindows.cpp实现 三、QSplashScreen动态图片加载 1、主程序实现 2、mainwindow.h实现 3、mainwindows.cpp实现 一、QSplashScreen的概述 QSplashScreen&#x…