本篇队长介绍一下如何 把前端上传的文件保存 到 后端flask项目目录
首先讲一下上传、保存文件的思路:
第一步:前端通过post请求方式提交上传的文件
<input id="file" type="file" name="fileName" style="display: inline-block"/>
<input type="submit" value="上传文件" />
第二步: 后端flask通过 request.files['fileName'] 获取文件对象
f = request.files['fileName']
第三步:指定要保存的文件夹的绝对路径 (此案例把上传文件放到task_files文件夹内)
UPLOAD_FOLDER = 'app/controls/task_mgm/task_files'
file_dir = os.path.join(os.getcwd(), UPLOAD_FOLDER)
第四步:分别 保存文件路径到本地 和数据库以便查询
file_path = os.path.join(file_dir, f.filename)
f.save(file_path)
task.fileName = f.filename
代码Demo
1 @duty_mgm.route('/upload', methods=['POST']) 2 @login_required 3 def upload(): 4 # 保存上传的文档 5 UPLOAD_FOLDER = 'app/controls/task_mgm/task_files' 6 file_dir = os.path.join(os.getcwd(), UPLOAD_FOLDER) 7 if not os.path.exists(file_dir): 8 os.makedirs(file_dir) 9 f =request.file.get('fileName') # 获取上传的文档对象 10 if f: 11 file_path = os.path.join(file_dir, f.filename) # filename是f的固有属性 12 f.save(file_path) # 保存到指定目录 13 task.fileName = f.filename # 保存到数据库 14 try: 15 db.session.add(task) 16 db.session.commit() 17 except Exception as e: 18 flash('添加失败') 19 flash('添加成功') 20 return render_template('/task_mgm/taskinfo_add.html', form=form, header=header) # 返回到文件上传页面
ALLOWED_EXTENSIONS = set(['txt', 'png', 'jpg', 'xls', 'JPG', 'PNG', 'xlsx', 'gif', 'GIF', 'ppt', 'pptx', 'doc', 'docx', 'csv', 'sql', 'py'])
# 用于判断文件后缀,可调用
def allowed_file(filename):
return '.' in filename and filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS