使用python的mangodb数据库文件上传下载的代码
时间: 2023-05-24 20:06:48 浏览: 129
# 导入pymongo模块
import pymongo
from gridfs import GridFS
# 连接数据库
client = pymongo.MongoClient('mongodb://localhost:27017/')
db = client['test_database']
fs = GridFS(db)
# 上传文件
file_path = './test.txt' # 文件路径
with open(file_path, 'rb') as f:
file_id = fs.put(f, filename='test.txt')
# 下载文件
file_id = '5f34e114f33bb81cc86a5341' # 文件id
file = fs.get(file_id)
file_name = file.filename
with open(file_name, 'wb') as f:
f.write(file.read())
相关问题
flask mongodb文件的上传和下载
Flask和MongoDB可以一起使用来实现文件的上传和下载。下面是一个简单的示例,演示如何使用Flask和MongoDB上传和下载文件。
首先,安装必要的Python库:
```python
pip install Flask
pip install pymongo
pip install pymongo[srv]
pip install gridfs
```
接下来,导入所需的库:
```python
from flask import Flask, request, send_file
from pymongo import MongoClient
from gridfs import GridFS
from bson.objectid import ObjectId
import os
```
然后,连接到MongoDB数据库:
```python
client = MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]
fs = GridFS(db)
```
现在,我们可以定义上传文件的路由:
```python
@app.route('/upload', methods=['POST'])
def upload():
file = request.files['file']
filename = file.filename
file_id = fs.put(file, filename=filename)
return str(file_id)
```
这个路由将接受POST请求,并从请求中获取上传的文件。然后,它将使用GridFS将文件保存到MongoDB,并返回文件的Object ID。
接下来,我们可以定义下载文件的路由:
```python
@app.route('/download/<file_id>')
def download(file_id):
file = fs.get(ObjectId(file_id))
return send_file(file, attachment_filename=file.filename)
```
这个路由将接受带有文件ID的GET请求,并使用GridFS从MongoDB获取文件。然后,它将使用Flask的send_file函数将文件作为响应发送回客户端。
最后,我们可以运行Flask应用程序:
```python
if __name__ == '__main__':
app.run(debug=True)
```
完整的代码如下所示:
```python
from flask import Flask, request, send_file
from pymongo import MongoClient
from gridfs import GridFS
from bson.objectid import ObjectId
import os
app = Flask(__name__)
client = MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]
fs = GridFS(db)
@app.route('/upload', methods=['POST'])
def upload():
file = request.files['file']
filename = file.filename
file_id = fs.put(file, filename=filename)
return str(file_id)
@app.route('/download/<file_id>')
def download(file_id):
file = fs.get(ObjectId(file_id))
return send_file(file, attachment_filename=file.filename)
if __name__ == '__main__':
app.run(debug=True)
```
使用这个示例,您可以上传和下载文件。要上传文件,请向/upload路由发送POST请求,并在请求中包含文件。要下载文件,请向/download/<file_id>路由发送GET请求,其中<file_id>是文件的Object ID。
mongodb 存储文件
MongoDB可以用来存储文件,通常使用GridFS来处理较大的文件。GridFS是MongoDB的一种存储方式,它将大文件分割为小块(chunk),并以二进制形式存储在集合中。
要使用GridFS存储文件,需要按照以下步骤进行操作:
1. 首先,连接到MongoDB数据库并选择要使用的数据库。
2. 创建一个GridFS存储桶(bucket),这个桶将用于存储文件。可以使用`db.createBucket()`方法来创建。
3. 将文件分割为小块,并使用`bucket.uploadFromStream()`方法将这些块上传到GridFS存储桶中。
4. 可以通过文件的唯一标识符(ObjectId)来检索文件,使用`bucket.find()`方法进行查询。
5. 可以通过`bucket.downloadToStream()`方法将文件下载到流或者直接保存到本地。
以下是一个使用GridFS存储文件的示例代码:
```python
from pymongo import MongoClient
from gridfs import GridFS
# 连接到MongoDB数据库
client = MongoClient('mongodb://localhost:27017/')
db = client['mydatabase']
# 创建GridFS存储桶
bucket = GridFS(db)
# 上传文件
with open('example.txt', 'rb') as file:
file_id = bucket.upload_from_stream('example.txt', file)
# 下载文件
with open('downloaded.txt', 'wb') as file:
bucket.download_to_stream(file_id, file)
```
在上面的示例中,我们首先连接到本地MongoDB数据库,然后选择名为`mydatabase`的数据库。然后,我们创建了一个GridFS存储桶`bucket`。接下来,我们使用`upload_from_stream()`方法将一个名为`example.txt`的文件上传到GridFS存储桶中,并获得了文件的唯一标识符`file_id`。最后,我们使用`download_to_stream()`方法将文件下载到本地,并保存为`downloaded.txt`。
请注意,上面的示例代码仅供参考,实际使用中可能需要根据具体需求进行调整。