通过在post请求中发送文件名,我无法从应用程序中找到本地文件。我怎么找到文件?

2024-09-28 15:30:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个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'


Tags: pathnamefromimageimport文件夹imgpng
2条回答

最好在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/')。你知道吗

相关问题 更多 >