栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python Flask - 实现本地文件的上传与下载

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python Flask - 实现本地文件的上传与下载

场景:
  • 点击上传文件按钮,选择需要上传的文件后上传
    • 文件上传成功后,会将文件保存到指定目录下
    • 限制上传文件的格式
  • 在前端点击文件后下载
    • 基于上述上传并保存到指定目录下的文件
上手 文件上传

app.py

@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
    # 渲染文件
    return render_template('upload.html')

# 文件保存的目录,根据实际情况的文件结构做调整;
# 若不指定目录,可以写成f.save(f.filename),可以默认保存到当前文件夹下的根目录
# 设置上传文件保存路径 可以是指定绝对路径,也可以是相对路径(测试过)
app.config['UPLOAD_FOLDER'] = './upload'
# 将地址赋值给变量
file_dir = app.config['UPLOAD_FOLDER']


@app.route('/uploader', methods=['GET', 'POST'])
def uploader():
    """
        文件上传
    """
    if request.method == 'POST':
        # input标签中的name的属性值
        f = request.files['file']

        # 拼接地址,上传地址,f.filename:直接获取文件名
        f.save(os.path.join(app.config['UPLOAD_FOLDER'], f.filename))
        # 输出上传的文件名
        print(request.files, f.filename)

        return '文件上传成功!'
    else:
        return render_template('upload.html')

upload.html



    
        
        上传

        
    
    
        

TEST

{# enctype:属性用于指定将上传文件数据发送给服务器端之前对表单数据进行编码的斱式 #} {# enctype="multipart/form-data" => 表示不对字符编码。当使用有文件上传控件的表单时,该值是必需的。 #}



{# accept可以自定以文件上传格式 #}





文件下载

app.py

@app.route('/download', methods=['GET', 'POST'])
def download():
    """
        文件下载
    :return:
    """
    timelist = []   # 获取指定文件夹下文件并显示
    Foder_Name = []     # 文件夹下所有文件
    Files_Name = []     # 文件名

    # 获取到指定文件夹下所有文件
    lists = os.listdir(file_dir + '/')

    # 遍历文件夹下所有文件
    for i in lists:
        # os.path.getatime => 获取对指定路径的最后访问时间
        timelist.append(time.ctime(os.path.getatime(file_dir + '/' + i)))

    # 遍历文件夹下的所有文件
    for k in range(len(lists)):
        # 单显示文件名
        Files_Name.append(lists[k])
        # 获取文件名以及时间信息
        Foder_Name.append(lists[k] + " ~~~~~~~~~~~~~~~~~~~~~ " + timelist[k])

    print(file_dir)     # ./upload

    return render_template('download.html', allname=Foder_Name, name=Files_Name)


@app.route('/downloads/', methods=['GET', 'POST'])
def downloads(path):
    """
        重写download方法,根据前端点击的文件传送过来的path,下载文件
	
		send_from_directory:用于下载文件
		flask.send_from_directory(所有文件的存储目录,相对于要下载的目录的文件名,as_attachment:设置为True是否要发送带有标题的文件)
    :param path:
    :return:
    """
    return send_from_directory(app.config['UPLOAD_FOLDER'], path, as_attachment=True)

download.html



    
        
        文件下载

        

    
    
        

文件下载



{# 输出文件名及文件详细信息(文件时间信息等) #} {% for fruit in allname %}
{{ fruit }} {% endfor %}



{# 将指定文件夹中的文件获取遍历显示 #} {% for n in name %} {{ n }}

{% endfor %}
运行
  • 文件上传和下载的视图函数代码都完成后,开始运行项目

app.py(在编写好试图代码的最下方编写运行代码)

"""
    运行项目
"""
if __name__ == '__main__':
	# 可以使统一局域网下的其他电脑访问该项目
    HOST = '0.0.0.0'
    # 项目运行端口
    PORT = 8990
    # debug=True => 打开调试模式,在对代码进行修改后,可以实时运行代码
    app.run(host=HOST, port=PORT, debug=True)
  • 打开调试模式后,运行项目建议在Pycharm中的Terminal命令行中输入以下运行
    python app.py
    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1008813.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号