flask mongodb文件的上传和下载
时间: 2023-05-30 09:06:24 浏览: 200
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。
阅读全文