• 在Flask中实现文件上传七牛云中并下载


    在Flask中实现文件上传和七牛云集成

    文件上传是Web应用中常见的功能之一,而七牛云则提供了强大的云存储服务,使得文件存储和管理变得更加便捷。在本篇博客中,我们将学习如何在Flask应用中实现文件上传,并将上传的文件保存到七牛云。

    步骤 1: 安装所需库

    首先,确保已安装Flask、SQLAlchemy(如果需要数据库支持)、以及七牛云的Python SDK。可以使用pip进行安装:

    pip install Flask Flask-SQLAlchemy qiniu
    
    • 1

    步骤 2: 设置Flask应用

    在Flask应用中,我们需要配置数据库(如果有)、七牛云以及路由来处理文件上传。这包括设置七牛云的 access_keysecret_keybucket_name 以及域名。

    
    from flask import Flask, request
    from flask_sqlalchemy import SQLAlchemy
    from qiniu import Auth, put_data
    
    app = Flask(__name__)
    app.config['SECRET_KEY'] = 'your-secret-key'  # 设置Flask的秘钥
    
    # 配置SQLAlchemy数据库
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@hostname/database'
    db = SQLAlchemy(app)
    
    # 配置七牛云
    auth = Auth(access_key='your-access-key', secret_key='your-secret-key')
    bucket_name = 'your-bucket-name'
    domain = 'your-domain'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    确保替换 your-secret-keyyour-access-keyyour-bucket-nameyour-domain 为你的七牛云配置信息。分别是公钥,私钥,空间id,域名.其中公钥和私钥在个人中心-秘钥管理查看.而空间id就是你的存储空间的名字.

    image.png

    image.png

    步骤 3: 编写上传下载文件路由

    编写一个路由,允许用户上传文件到七牛云。我们将使用 put_file 函数来实现文件的直接上传。注意,你可以根据需要添加其他验证逻辑。

    
    @app.route('/upload', methods=['POST'])
    def upload():
        if 'file' not in request.files:
            return "没有文件部分"
    
        file = request.files['file']
        if file.filename == '':
            return "没有选择文件"
    
        with file.stream as data:
            token = auth.upload_token(bucket_name, file.filename)
            ret, info =put_file(token, file.filename, data)
    
        if info.status_code == 200:
            file_url = f'http://{domain}/{file.filename}'
            return f'文件上传成功!{file_url}">查看文件'
        else:
            return "文件上传失败"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    这个路由接受POST请求中的文件,并使用 put_file 函数将文件上传到七牛云。如果上传成功,它会返回如图所示

    image.png
    key为文件名称hash为tag.

    接下来就是下载文件.

    from qiniu import Auth
    
    access_key = 'your_AK'  # 替换为你的 Access Key
    secret_key = 'your_SK'  # 替换为你的 Secret Key
    q = Auth(access_key, secret_key)
    
    bucket_name = 'your_bucket_name'  # 替换为你的 bucket 的名字
    file_name = 'your_file_name'  # 替换为你要下载的文件名
    
    # 生成下载链接,有效期为 3600s
    private_url = q.private_download_url('http://'+ bucket_name +'.qiniudn.com/'+ file_name, expires=3600)
    print(private_url)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    这段代码会输出一个 URL,你可以在浏览器中打开这个 URL 来下载文件。请注意,这个 URL 在生成后的一小时内有效。

    而如果想在 Flask 中实现文件下载,我们可以创建一个路由来处理下载请求:

    from flask import Flask, redirect
    app = Flask(__name__)
    
    @app.route('/download/')
    def download(file_name):
        private_url = q.private_download_url('http://'+ bucket_name +'.qiniudn.com/'+ file_name, expires=3600)
        return redirect(private_url)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    然后,我们可以通过访问 http://your_server_address/download/your_file_name 来下载文件。

    步骤 4: 创建HTML表单

    最后,创建一个HTML表单,允许用户选择文件并将其上传到你的Flask应用。你可以根据需要自定义表单样式。

    
    DOCTYPE html>
    <html>
    <head>
        <title>文件上传title>
    head>
    <body>
        <form method="POST" action="/upload" enctype="multipart/form-data">
            <input type="file" name="file">
            <input type="submit" value="上传文件">
        form>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    这段代码构建了一个简单的上传表单,其中包含一个文件选择字段和一个提交按钮以方便我们触发上传。

    通过按照上述步骤,就可以在Flask应用中实现文件上传和下载,将上传的文件保存到七牛云并下载。

  • 相关阅读:
    矩阵分析与应用-18-Moore-Penrose逆矩阵02
    SPSS多元方差分析
    容器基础镜像的编写及最佳实践
    流量管理技术
    Oracle VM VirtualBox 安装 Ubuntu Linux
    C++ 数据结构与算法(十三)(单调栈)
    vue基础知识六:v-show和v-if有什么区别?使用场景分别是什么?
    Rancher-Kubewarden-保姆级教学-含Demo测试
    用Python和OpenGL实现体光线投射算法(Win11)
    力扣刷题学习SQL篇——1-12 树节点(使用行转列union/条件判断case when)
  • 原文地址:https://blog.csdn.net/kilig_CSM/article/details/134208583