|
介绍在本教程中,我们将学习如何使用PythonFlask框架将文件上传到服务器,并使用SQLite数据库来跟踪上传的文件。我们将提供后端代码和一个示例项目的Git链接,以便您可以轻松地跟随本教程。准备工作首先,您需要安装Python和Flask框架。您可以按照Flask官方文档上的说明进行安装pipinstallflask项目结构我们的项目包含以下文件:app.py:包含Flask应用程序的后端代码file_mapping.db:SQLite数据库文件,用于跟踪上传的文件uploads文件夹:用于存储上传的文件代码解释importosimportuuidimportsqlite3fromflaskimportFlask,request,send_from_directory,render_templateapp=Flask(__name__)UPLOAD_FOLDER='uploads'app.config['UPLOAD_FOLDER']=UPLOAD_FOLDERapp.config['MAX_CONTENT_LENGTH']=100*1024*1024#设置最大文件上传大小为100MB#创建保存文件的目录ifnotos.path.exists(UPLOAD_FOLDER)s.makedirs(UPLOAD_FOLDER)#初始化数据库conn=sqlite3.connect('file_mapping.db')c=conn.cursor()c.execute('''CREATETABLEIFNOTEXISTSfiles(idINTEGERPRIMARYKEY,original_filenameTEXT,new_filenameTEXT)''')conn.commit()conn.close()@app.route('/')defindex():returnrender_template("Upload.html")@app.route('/upload',methods=['POST'])defupload_file():ifrequest.method=='POST':if'folder'notinrequest.files:return'Nofolderpart'folder=request.files.getlist('folder')try:conn=sqlite3.connect('file_mapping.db')#noinspectionPyShadowingNamesc=conn.cursor()forfileinfolder:iffile.filename=='':return'没有选择文件'iffileriginal_filename=file.filename#查询数据库,检查文件名是否已经存在c.execute("SELECTidFROMfilesWHEREoriginal_filename=?",(original_filename,))existing_file=c.fetchone()ifexisting_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("INSERTINTOfiles(original_filename,new_filename)VALUES(?,?)",(original_filename,new_filename))conn.commit()return'文件上传完成'exceptExceptionase:return'文件上载过程中出错:{}'.format(str(e))finally:conn.close()else:return'请求方法不允许'@app.route('/list_files',methods=['GET'])deflist_files():conn=sqlite3.connect('file_mapping.db')c=conn.cursor()c.execute("SELECToriginal_filename,new_filenameFROMfiles")files=c.fetchall()conn.close()returnrender_template('Review.html',files=files)@app.route('/download/')defdownload_file(filename):returnsend_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结论通过本教程,您将学会如何使用PythonFlask框架将文件上传到服务器,并使用SQLite数据库来管理上传的文件。希望本教程对您有所帮助!
|
|