侧边栏壁纸
博主头像
拾荒的小海螺博主等级

只有想不到的,没有做不到的

  • 累计撰写 194 篇文章
  • 累计创建 19 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录
Pyt

Python:Flask 实现图片上传到七牛云空间的技术指南

拾荒的小海螺
2024-10-10 / 0 评论 / 0 点赞 / 15 阅读 / 5881 字

1、简述

在 Python 开发中,Flask 是一个轻量级的 Web 框架,适合构建简单的 Web 应用和 RESTful API。当涉及图片上传时,通常我们需要将图片存储到云端,而不是直接保存在服务器本地。七牛云作为一款成熟的云存储服务,提供了丰富的 API 来帮助我们实现这一需求。

本文将介绍如何使用 Flask 实现图片上传,并将图片保存到七牛云空间中,最后展示详细的 Python 代码样例。

image-ordo.png

2、准备工作

2.1 安装必要的依赖

首先,你需要安装 Flask 以及七牛云的 Python SDK。可以通过 pip 来安装:

pip install Flask qiniu

2.2 注册七牛云账号并获取密钥

要使用七牛云的存储服务,首先需要在 七牛云官网 注册一个账号并创建一个存储空间。创建成功后,你将得到以下关键信息:

  • Access Key (AK)
  • Secret Key (SK)
  • 存储空间名 (Bucket Name)
  • 外链域名 (用于访问存储的文件)

image-govp.png

备注:请实名认证获取免费的10G网盘空间

3、文件上传功能

我们首先编写一个 Flask 应用,允许用户通过表单上传图片。

3.1 处理文件上传

在 Flask 中,我们可以使用 request.files 来获取上传的文件。下面是一个基本的文件上传示例:

from flask import Flask, request, redirect, url_for, render_template
from werkzeug.utils import secure_filename
import os

app = Flask(__name__)

# 允许上传的文件类型
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'}

# 上传文件的路径
UPLOAD_FOLDER = 'uploads/'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

# 检查文件类型
def allowed_file(filename):
    return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

@app.route('/', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        # 检查请求中是否包含文件
        if 'file' not in request.files:
            return 'No file part'
        file = request.files['file']
        if file.filename == '':
            return 'No selected file'
        if file and allowed_file(file.filename):
            filename = secure_filename(file.filename)
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
            return redirect(url_for('upload_file', filename=filename))
    return render_template('upload.html')

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

3.2 创建上传页面 upload.html

在 templates 文件夹下创建一个简单的 HTML 表单页面,用于上传图片:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Upload File</title>
</head>
<body>
    <h1>Upload Image</h1>
    <form action="/" method="post" enctype="multipart/form-data">
        <input type="file" name="file">
        <input type="submit" value="Upload">
    </form>
</body>
</html>

此时,Flask 应用已经可以处理本地文件的上传。接下来,我们将实现将文件上传到七牛云空间的功能。

4、上传图片到七牛云

4.1 七牛云 SDK 配置

首先,在代码中引入七牛云 Python SDK,并配置 Access Key 和 Secret Key。

import qiniu

# 七牛云配置信息
ACCESS_KEY = '你的AccessKey'
SECRET_KEY = '你的SecretKey'
BUCKET_NAME = '你的BucketName'
QINIU_DOMAIN = '你的外链域名'  # 例如:http://your-domain.qiniudn.com/

# 获取上传凭证
def get_qiniu_token():
    q = qiniu.Auth(ACCESS_KEY, SECRET_KEY)
    token = q.upload_token(BUCKET_NAME)
    return token

# 上传文件到七牛云
def upload_to_qiniu(file_path, file_name):
    token = get_qiniu_token()
    ret, info = qiniu.put_file(token, file_name, file_path)
    if ret:
        return QINIU_DOMAIN + '/' + file_name
    else:
        raise Exception('Upload to Qiniu failed.')

4.2 集成七牛云到 Flask 上传功能

接下来,我们将上传的图片保存到七牛云。修改 upload_file 函数,将文件保存到本地后,再上传到七牛云空间。

@app.route('/', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        if 'file' not in request.files:
            return 'No file part'
        file = request.files['file']
        if file.filename == '':
            return 'No selected file'
        if file and allowed_file(file.filename):
            filename = secure_filename(file.filename)
            file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
            file.save(file_path)

            # 上传文件到七牛云
            try:
                qiniu_url = upload_to_qiniu(file_path, filename)
                return f'File uploaded successfully! Qiniu URL: {qiniu_url}'
            except Exception as e:
                return f'Upload to Qiniu failed: {str(e)}'
    return render_template('upload.html')

在用户上传图片时,程序会首先将文件保存在本地,然后使用七牛云 SDK 将文件上传到云端,返回上传后的文件 URL。

5、总结

本文介绍了如何使用 Flask 实现图片上传,并将文件上传到七牛云存储空间。通过七牛云的 Python SDK,我们可以轻松地将文件存储在云端,并获得对应的访问 URL。在实际应用中,这种方法适用于构建图片上传功能的项目,如电商平台、社交媒体等。

0

评论区