如何使用 pymongo 在 MongoDB 中存储图像?
How to storage an image in MongoDB with pymongo?
我正在使用 FastAPI 做一个简单的 CRUD 以将图像及其信息存储在 MongoDB 中,到目前为止这是我的代码:
@app.post("/postImage")
async def image_post(id: str, author: str, title: str, file: UploadFile = File(...)):
file.filename = f"{uuid.uuid4()}.jpg"
contents = await file.read()
image = base64.b64decode(contents)
data = {"_id": id, "author": author, "title": title ,"data": image, "posted": False,"uploaded": datetime.now()}
try:
collection.insert_one(data)
except:
print('Error')
return("Added successfully")
但是,当我尝试将字节转换为字符串时,returns 出错了。
image = base64.b64decode(contents)
print(image.decode('utf-8'))
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb0 in position 11: invalid start byte
我尝试了很多替代方法,但我不知道哪里出了问题。
Mongo 建议用这个来存储大于 16mb 的文件 (GridFS)
我建议你这样做:
首先在名为“static”的项目中创建目录,然后执行此操作
import uuid
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
from fastapi import UploadFile, File, status
import aiofiles
app = FastAPI()
app.mount("/static", StaticFiles(directory="static"), name="static")
@app.post("/")
async def post_endpoint(in_file: UploadFile = File(...)):
random_name = uuid.uuid4()
async with aiofiles.open(f"static/{random_name}.jpg", "wb") as out_file:
while content := await in_file.read(1024): # async read chunk
await out_file.write(content)
return {"Result": "OK"}
然后将你的文件名像字符串一样保存在数据库中。
要获取图像,您可以使用以下方法:
http://127.0.0.1:8000/static/uuiduuiduuiduuiduuiduuiduuid.jpg
我正在使用 FastAPI 做一个简单的 CRUD 以将图像及其信息存储在 MongoDB 中,到目前为止这是我的代码:
@app.post("/postImage")
async def image_post(id: str, author: str, title: str, file: UploadFile = File(...)):
file.filename = f"{uuid.uuid4()}.jpg"
contents = await file.read()
image = base64.b64decode(contents)
data = {"_id": id, "author": author, "title": title ,"data": image, "posted": False,"uploaded": datetime.now()}
try:
collection.insert_one(data)
except:
print('Error')
return("Added successfully")
但是,当我尝试将字节转换为字符串时,returns 出错了。
image = base64.b64decode(contents)
print(image.decode('utf-8'))
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb0 in position 11: invalid start byte
我尝试了很多替代方法,但我不知道哪里出了问题。
Mongo 建议用这个来存储大于 16mb 的文件 (GridFS)
我建议你这样做: 首先在名为“static”的项目中创建目录,然后执行此操作
import uuid
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
from fastapi import UploadFile, File, status
import aiofiles
app = FastAPI()
app.mount("/static", StaticFiles(directory="static"), name="static")
@app.post("/")
async def post_endpoint(in_file: UploadFile = File(...)):
random_name = uuid.uuid4()
async with aiofiles.open(f"static/{random_name}.jpg", "wb") as out_file:
while content := await in_file.read(1024): # async read chunk
await out_file.write(content)
return {"Result": "OK"}
然后将你的文件名像字符串一样保存在数据库中。
要获取图像,您可以使用以下方法: http://127.0.0.1:8000/static/uuiduuiduuiduuiduuiduuiduuid.jpg