首页 帮助中心 美国云服务器 把文件上传到数据库中的常用方法
把文件上传到数据库中的常用方法
时间 : 2025-01-20 11:13:46 编辑 : 华纳云 阅读量 : 6

把文件上传到数据库中是常见操作,特别是在需要存储文件元数据、小文件或者需要和文件相关的业务逻辑紧密集成场景中。下面分享常用到的文件传输到数据库中的方法。

文件内容可以直接通过二进制数据存储到数据库中。这种方式常用于存储小文件或需频繁访问的文档。现在前端上传好文件,用HTML表单或AJAX把文件发送到后端服务器:

<form method="POST" enctype="multipart/form-data" action="/upload">

<input type="file" name="file" />

<button type="submit">上传</button>

</form>

后端接收文件后,把其读取为二进制数据如:

from flask import Flask, request

import sqlite3

app = Flask(__name__)

@app.route('/upload', methods=['POST'])

def upload_file():

file = request.files['file']

file_data = file.read()  # 读取文件内容为二进制数据

file_name = file.filename

# 连接数据库并插入数据

conn = sqlite3.connect('example.db')

cursor = conn.cursor()

cursor.execute('''

CREATE TABLE IF NOT EXISTS files (

id INTEGER PRIMARY KEY AUTOINCREMENT,

name TEXT,

data BLOB

)

''')

cursor.execute('INSERT INTO files (name, data) VALUES (?, ?)', (file_name, file_data))

conn.commit()

conn.close()

return "文件上传成功!"

if __name__ == '__main__':

app.run(debug=True)

再将文件名和内存存储到数据库中,如数据库表结构为:

CREATE TABLE files (

id INTEGER PRIMARY KEY AUTOINCREMENT,

name TEXT,

data BLOB

);

这类方式是把文件直接存于数据库,便于管理,需要时可以直接从数据库中读取到文件。但是不适用于大文件,会占用过多空间影响性能。

把文件存储到文件系统同时把文件路径、元数据等信息存储到数据库中,这种方式可以用于大文件或高性能存储中。先同上步一样在前端上传文件,然后在后端接收文件后把文件存于服务器文件系统如:

from flask import Flask, request

import os

import sqlite3

app = Flask(__name__)

UPLOAD_FOLDER = '/path/to/upload'

@app.route('/upload', methods=['POST'])

def upload_file():

file = request.files['file']

file_path = os.path.join(UPLOAD_FOLDER, file.filename)

file.save(file_path)  # 将文件保存到文件系统

# 将文件路径存储到数据库

conn = sqlite3.connect('example.db')

cursor = conn.cursor()

cursor.execute('''

CREATE TABLE IF NOT EXISTS files (

id INTEGER PRIMARY KEY AUTOINCREMENT,

name TEXT,

path TEXT

)

''')

cursor.execute('INSERT INTO files (name, path) VALUES (?, ?)', (file.filename, file_path))

conn.commit()

conn.close()

return "文件上传成功!"

if __name__ == '__main__':

app.run(debug=True)

存储的数据库表结构:

CREATE TABLE files (

id INTEGER PRIMARY KEY AUTOINCREMENT,

name TEXT,

path TEXT

);

这种方式不容易因为文件内容而膨胀,常常用于大文件存储。但是文件存储和存储库分离,管理起来更麻烦还要额外处理文件备份及同步。

使用对象存储服务,这种方式是把文件上传到云存储服务中,且把文件的元数据存储到数据库中,也可用于需要高可用性及扩展性的应用场景中。在前端上传好文件后,使用云存储的SD把文件存于对象存储服务中,再把存储文件元数据存储到数据库中。还可以应用分布式文件系统,这种方式适合高并发和分布式存储,大规模文件存储的常用方法。

华纳云 推荐文章
linux云服务器安全防护技术标准有哪些 Linux中使用mmv重命名文件并高级重命名方法 DoH具体操作方法及使用优势 应用HTTPS能抵御得住DNS污染吗 Nmon监控和优化Linux系统的性能的方法 盘点老旧Ubuntu系统加速技巧 Ubuntu系统中删除PPA存储库的操作方法 Redis中快速清除数据的便捷方式 Linux中用systemd设置定时器 CentOS Stream和CentOS Linux两者差异有哪些
客服咨询
7*24小时技术支持
技术支持
渠道支持