在Flask应用程序中将上传的文件转换为Sqlite DB的BLOB

a0zr77ik  于 2023-01-31  发布在  SQLite
关注(0)|答案(1)|浏览(275)

帮助将用户上载的文件转换为BLOB。无法识别返回的文件名路径:未找到文件错误:[Errno 2]没有这样的文件或目录:'****. png'没有blob对话,它可以工作,但需要blob文件输入
应用程序(例如,使用"admin"用户ID)

@app.route("/upload", methods=["GET", "POST"])
def upload():
    if request.method == "GET":
        return render_template("upload.html")
    else:
        file_upload = convert_into_binary(request.form.get("file_upload"))
        print(file_upload)
        secure_file = secure_filename(file_upload)
        db.execute("INSERT INTO uploads (user_id, file, timestamp) VALUES (?,?,?)", ("admin", secure_file, datetime.now()))
        return render_template("index.html")

转换为二进制代码

def convert_into_binary(file_path):
  with open(file_path, 'rb') as file:
    binary = file.read()
  return binary

Sqlite数据库创建

db.execute("CREATE TABLE IF NOT EXISTS uploads(id INTEGER, user_id NUMERIC NOT NULL, file BLOB NOT NULL, timestamp TEXT, PRIMARY KEY(id))")

用于表单输入的HTML(使用bootstrap css)

<form action="/upload" method="post" class="upload-form text-center">
        <div class="mb-3">
            <input autocomplete="off" autofocus class="form-control mx-auto w-auto" id="file_upload" name="file_upload" placeholder="Upload" type="file" accept="image/*">
        </div>
        <button class="btn btn-primary mx-auto" type="submit">Upload</button>
    </form>

希望能够上传图片和视频到数据库中的"上传"表(暂时只接受图片测试)。

kkih6yb8

kkih6yb81#

要使用SQLite在Flask应用中将上传的文件转换为BLOB(二进制大对象),您可以使用以下步骤:
在HTML表单中,确保有一个文件输入字段供用户选择文件。
在Flask路由中,使用request.files对象获取上传的文件。
使用file对象上的read()方法读取文件的内容。
使用bytes()函数将内容转换为二进制字符串。
将二进制字符串作为BLOB存储在SQLite数据库中。
下面是一个Flask路由中的代码示例,用于将上传的文件转换为BLOB并将其存储在SQLite数据库中:

from flask import Flask, request, render_template
import sqlite3

app = Flask(__name__)

@app.route("/upload", methods=["GET", "POST"])
def upload():
    if request.method == "POST":
        file = request.files["file"]
        file_contents = file.read()
        binary_contents = bytes(file_contents)

        conn = sqlite3.connect("mydatabase.db")
        c = conn.cursor()
        c.execute("INSERT INTO mytable (file_data) VALUES (?)", (sqlite3.Binary(binary_contents),))
        conn.commit()
        conn.close()

        return "File uploaded and stored as BLOB in database."
    return render_template("upload.html")

在本例中,mydatabase.db是SQLite数据库的名称,mytable是数据库中要存储BLOB的表的名称。请确保在运行此代码之前创建具有BLOB列的表。

相关问题