python 生成二维码,本地服务器上传数据,直接运行就能用

python 生成二维码,本地服务器上传数据,直接运行就能用
uploadpdf.py

from flask import Flask, request, redirect, url_for,abort,send_from_directory
import mysql.connector
import os
import qrcode
app = Flask(__name__)

# 数据库配置
db_config = {
    'host': '127.0.0.1',
    'user': 'abc',
    'password': 'abc',
    'database': 'abc_v3'
}

UPLOAD_FOLDER = 'uploads'
if not os.path.exists(UPLOAD_FOLDER):
    os.makedirs(UPLOAD_FOLDER)

def upload_file_to_db(file_path, mime_type,file_name):
    try:
        # 连接数据库
        conn = mysql.connector.connect(
            host=db_config['host'],
            user=db_config['user'],
            password=db_config['password'],
            database=db_config['database']
        )
        cursor = conn.cursor()

        # 读取文件内容
        with open(file_path, 'rb') as file:
            file_data = file.read()

        # 插入文件数据,注意注意注意下面的pdf_documents是我自己数据库里放pdf的表名称,需要改成你自己表的名字!!!
        query = "INSERT INTO pdf_documents (name, mime_type,content,file_path) VALUES (%s, %s,%s,%s)"
        cursor.execute(query, (file_name,mime_type, file_data,file_path))

        conn.commit()
        print(f"File '{file_name}' uploaded successfully.")
    except mysql.connector.Error as err:
        print(f"Error: {err}")
    finally:
        cursor.close()
        conn.close()

@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        file = request.files['file']
        if file:
            file_path = os.path.join('uploads', file.filename)
            file.save(file_path)
            upload_file_to_db(file_path,'application/pdf', file.filename)
            return 'File uploaded successfully'
    return '''
    <html>
        <body>
            <form method="POST" enctype="multipart/form-data">
                <input type="file" name="file">
                <input type="submit">
            </form>
        </body>
    </html>
    '''
# 配置文件夹路径
app.config['DOCUMENTS_FOLDER'] = 'uploads'

# 确保文件夹存在
def ensure_folder_exists(folder_path):
    if not os.path.exists(folder_path):
        os.makedirs(folder_path)

ensure_folder_exists(app.config['DOCUMENTS_FOLDER'])

@app.route('/uploads/<filename>')
def download_file(filename):
    try:
        return send_from_directory(app.config['DOCUMENTS_FOLDER'], filename)
    except FileNotFoundError:
        abort(404)

def get_file_path_from_db(file_id):
    try:
        conn = mysql.connector.connect(**db_config)
        cursor = conn.cursor()
        query = "SELECT file_path FROM pdf_documents WHERE id = %s"
        cursor.execute(query, (file_id,))
        result = cursor.fetchone()
        return result[0] if result else None
    except mysql.connector.Error as err:
        print(f"Database error: {err}")
        return None
    finally:
        cursor.close()
        conn.close()



if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=8000)

需要下载以下库,指令如下

pip install mysql-connector-python flask qrcode -i https://pypi.tuna.tsinghua.edu.cn/simple
配置好自己本地数据库的用户密码和数据库名字,就直接运行上述代码

再在浏览器里输入
http://127.0.0.1:8000/upload
即可出现上述画面在这里插入图片描述
最后这里将我们要上传的pdf选择好,并提交,就会插入到我们自己数据库里啦!
在这里插入图片描述

这里需要提前建表,需要包含name,file_path,mime_type,content,upload_time字段,照着抄,这样运行代码就不用改直接能用
上传文件会自动保存到本地项目的文件里
在这里插入图片描述

上传完文件到生成二维码的代码了
generate_qcr.py

from stat import FILE_ATTRIBUTE_NO_SCRUB_DATA
import qrcode
import mysql.connector

# 配置数据库连接
db_config = {
    'host': 'localhost',
    'user': 'abc',
    'password': 'abc',
    'database': 'abc_v3'
}

# 获取文件路径的URL
def get_file_id_url(file_id, server_ip):
    conn = mysql.connector.connect(**db_config)
    cursor = conn.cursor()
    query = "SELECT file_path, name FROM pdf_documents WHERE id = %s"
    
    cursor.execute(query, (file_id,))
    result = cursor.fetchone()
    cursor.close()
    conn.close()
    file_path, file_name = result
    if result:
        # 使用服务器的本地网络 IP 地址
        return f"http://{server_ip}:8000/uploads/{file_name}"
    else:
        return None

# 生成二维码
def generate_qr_code(data, output_file):
    qr = qrcode.QRCode(
        version=1,
        error_correction=qrcode.constants.ERROR_CORRECT_L,
        box_size=10,
        border=4,
    )
    qr.add_data(data)
    qr.make(fit=True)
    img = qr.make_image(fill='black', back_color='white')
    img.save(output_file)

# 生成包含本地文档路径的二维码
def generate_qrcode(local_file_path,output_file):
    qr = qrcode.QRCode(
        version=1,
        error_correction=qrcode.constants.ERROR_CORRECT_L,
        box_size=10,
        border=4,
    )
    qr.add_data(local_file_path)
    qr.make(fit=True)
    qr_img = qr.make_image(fill_color="black", back_color="white")
    qr_img.save(output_file)  # 保存生成的二维码图片

if __name__ == '__main__':
    file_id = 9 # 要生成二维码的文件 ID,这个ID是你数据库里存的那个文件ID

    server_ip = '192.168.101.45'  # 替换为你的服务器的本地 IP 地址
    file_url = get_file_id_url(file_id, server_ip)
    if file_url:
        # generate_qr_code(file_url, f'qr_code_{file_id}.png')
        generate_qrcode(file_url, f'qr_code_{file_id}.png')
        print(f"QR code generated for URL: {file_url}")
    else:
        print("File ID not found in the database.")

一键运行即可生成二维码

扫描二维码就可以拿到我们上传到本地数据库的文件了

根据pdf在数据库表中唯一id查找文件名并合成url,再生成二维码,注意服务器IP地址为实际IP地址,不是localhost也不是127.0.0.1,本机的IP为192.168.101.45。
在项目启动时,同时手机和服务器在同一局域网时,即可实现扫码得说明书。目前只实现了扫码跳转下载pdf文档。
在这里插入图片描述
在这里插入图片描述
我的项目没有启动,是部署在本地所以扫这个二维码大家扫不出东西【捂脸】但是你们自己在自己电脑上跑项目是可以扫出东西的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值