Flask 实现文件上传下载

本文介绍了一个使用Flask框架实现的文件上传与下载服务。该服务支持多种文件类型,包括JSON、WAV和MP3等,并针对不同类型的文件提供特定的存储路径。文章详细展示了如何配置Flask应用来接收文件上传请求、验证文件类型、保存文件到服务器以及提供文件下载功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

from flask import Flask,request,jsonify,send_from_directory
from werkzeug.utils import secure_filename
import os


#Flask 实现文件上传下载

app = Flask(__name__)
JSON_UPLOAD_FOLDER='json_upload'
RECORD_UPLOAD_FOLDER='record_upload'
app.config['JSON_UPLOAD_FOLDER'] = JSON_UPLOAD_FOLDER
app.config['RECORD_UPLOAD_FOLDER'] = RECORD_UPLOAD_FOLDER
ALLOWED_EXTENSIONS = set(['json','wav','mp3'])

basedir = os.path.abspath(os.path.dirname(__file__))


def allowed_file(filename):
    return  '.' in filename and filename.rsplit('.',1)[1] in ALLOWED_EXTENSIONS

def format_dir(filename):
    # 不同类型文件路径不同
    suffix = filename.rsplit('.', 1)[1]
    if suffix == 'json':
        file_dir = os.path.join(basedir, app.config['JSON_UPLOAD_FOLDER'])
    elif suffix == 'mp3' or 'wav':
        file_dir = os.path.join(basedir, app.config['RECORD_UPLOAD_FOLDER'])
    return file_dir

# strict_slashes=None,        对URL最后的 / 符号是否严格要求
#  如:
#   @app.route('/index',strict_slashes=False),
#  访问 http://www.xx.com/index/ 或 http://www.xx.com/index均可
#   @app.route('/index',strict_slashes=True)
#   仅访问 http://www.xx.com/index

@app.route('/upload',methods=['POST'],strict_slashes=False)
def upload():
    if request.method == 'POST':
        upload_files = request.files['file']
        filename = upload_files.filename

        if upload_files and allowed_file(filename):
            file_dir = format_dir(filename)   # 获取文件保存路径

            if not os.path.exists(file_dir):
                os.makedirs(file_dir)

            file_name = secure_filename(upload_files.filename)
            upload_files.save(os.path.join(file_dir, file_name))
            return jsonify({"errno": 0, "msg": "succeed "})

        return jsonify({"errno": 1, "msg": "file suffix not allowed "})


@app.route("/download/<path:filename>",methods=['GET'])  # filename是一个相对路径,相对于程序所在路径
def downloader(filename):
    return send_from_directory(app.root_path, filename, as_attachment=True)  # as_attachment=True 一定要写,不然会变成打开,而不是下载


if __name__ == '__main__':
    app.run('0.0.0.0',8888,debug=True)

postman 测试结果:
在这里插入图片描述

在这里插入图片描述

本实例采用的是Uploadify上传插件,.NET程序,源程序是从网上找的,但是有Bug,已经修改好,并标有部分注释。绝对好用,支持单文件、多文件上传,支持大文件上传,已经过多方面测试,保证好用。 以下附上Uploadify部分常用的参数介绍,要看全部的就去看其API文件了,一般在下载的包里都有。  uploader : uploadify.swf 文件的相对路径,该swf文件是一个带有文字BROWSE的按钮,点击后弹出打开文件对话框,默认值:uploadify.swf。   script : 后台处理程序的相对路径 。默认值:uploadify.php   checkScript :用来判断上传选择的文件在服务器是否存在的后台处理程序的相对路径   fileDataName :设置一个名字,在服务器处理程序中根据该名字来取上传文件的数据。默认为Filedata   method : 提交方式Post 或Get 默认为Post   scriptAccess :flash脚本文件的访问模式,如果在本地测试设置为always,默认值:sameDomain   folder : 上传文件存放的目录 。   queueID : 文件队列的ID,该ID与存放文件队列的div的ID一致。   queueSizeLimit : 当允许多文件生成时,设置选择文件的个数,默认值:999 。   multi : 设置为true时可以上传多个文件。   auto : 设置为true当选择文件后就直接上传了,为false需要点击上传按钮才上传 。   fileDesc : 这个属性值必须设置fileExt属性后才有效,用来设置选择文件对话框中的提示文本,如设置fileDesc为“请选择rar doc pdf文件”,打开文件选择框效果如下图:   fileExt : 设置可以选择的文件的类型,格式如:'*.doc;*.pdf;*.rar' 。   sizeLimit : 上传文件的大小限制 。   simUploadLimit : 允许同时上传的个数 默认值:1 。   buttonText : 浏览按钮的文本,默认值:BROWSE 。   buttonImg : 浏览按钮的图片的路径 。   hideButton : 设置为true则隐藏浏览按钮的图片 。   rollover : 值为true和false,设置为true时当鼠标移到浏览按钮上时有反转效果。   width : 设置浏览按钮的宽度 ,默认值:110。   height : 设置浏览按钮的高度 ,默认值:30。   wmode : 设置该项为transparent 可以使浏览按钮的flash背景文件透明,并且flash文件会被置为页面的最高层。 默认值:opaque 。   cancelImg :选择文件到文件队列中后的每一个文件上的关闭按钮图标 Uploadify还自带了很多参数及有用的方法和回调函数,都在API里,虽然是全英文的,但很容易看懂,这里就不说了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值