我正在创建一个restapi(使用FastAPI),在我的项目中有一个包含图像的本地文件夹,我应该在POST请求中发送照片的名称,以便用我创建的方法访问它。你知道吗
问题是,当我将照片名称发送到POST时,它在我的应用程序中找不到该文件。你知道吗
我怎样才能找到这张照片以便使用?你知道吗
我使用的是相对路径(dirname和abspath)操作系统路径),但它不起作用。你知道吗
文件夹结构:
.
├── app/
│ └── main.py
├── public/
│ ├── 1.png
│ ├── 2.png
│ └── 3.png
├── docker-compose.yml
├── Dockerfile
├── .gitignore
└── requirements.txt
你知道吗主.py你知道吗
from fastapi import FastAPI
from starlette.responses import JSONResponse
import io
from os.path import dirname, abspath, join
from PIL import Image
dirname = dirname(dirname(abspath(__file__)))
images_path = join(dirname, '/public/')
def read_byte_img(image_path):
img = Image.open(image_path, mode='r')
imgByteArr = io.BytesIO()
img.save(imgByteArr, format='PNG')
return imgByteArr
@app.post("/test")
def test(image_name: str):
image_name = image_name + '.png'
img = images_path + image_name
byte_img = read_byte_img(img)
return SONResponse({'response': str(byte_img)})
我试着发邮件:
localhost/analyze?image_name=1
答案是:
FileNotFoundError: [Errno 2] No such file or directory: '/public/1.png'
最好在GitHub问题中提出这些问题:https://github.com/tiangolo/fastapi/issues,这样我(或其他人)可以看到您的问题并帮助您。你知道吗
在本例中,我看到您有一个
docker-compose.yml
文件。因此,首先,检查是否已将public
文件作为卷装入容器中,或者它是否已创建。你知道吗要检查它,可以使用
docker exec -it your-container bash
,然后导航到目录并查看文件的位置。你知道吗将参数传递给
os.path.join
时,如果第二个参数是绝对路径(开头有/
),则返回第二个参数。你知道吗images_path = join(dirname, '/public/')
应更改为images_path = join(dirname, 'public/')
。你知道吗相关问题 更多 >
编程相关推荐