我正在尝试使用反应前端和 fastapi 后端创建一个简单的 Web 应用程序。Web 应用程序的一个功能是发送在前端收集并在后端处理的文件。我在后端有一个端点,如下所示:
@app.post("/upload_file/")
async def create_upload_file(file: UploadFile = File(...)):
for line in file.file.readlines():
print(line)
file.file.close()
return {"filename": file.filename}
我已确认此代码有效。我可以从前端发送一个文件,观察后端终端上打印出来的行,然后前端会收到一个带有 200 状态码和文件名的 http 响应。
当我尝试使用 pyyaml 库处理入站 yaml 文件时,问题就出现了。下面是一个不起作用的代码片段:
@app.post("/upload_file/")
async def create_upload_file(file: UploadFile = File(...)):
yaml_data = yaml.load(file, Loader=yaml.FullLoader)
return yaml_data
我得到错误:
Access to XMLHttpRequest at 'http://127.0.0.1:8000/upload_file/' (redirected from 'http://127.0.0.1:8000/upload_file') from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
所以这似乎是一个 CORS 问题......我目前对 FastAPI 的 CORS 政策如下所示:
origins = [
"http://localhost",
"http://localhost:3000",
"http://127.0.0.1:8000",
]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
我是否必须在我的 CORS 策略中添加一些内容以允许它使用 pyyaml?yaml.load()
我不认为会是这种情况,因为处理仍然应该在同一个端点上完成(注意端点在同一个地方),但是 CORS 显然对使用该功能不满意。任何关于能够在我的后端加载 yaml 文件的建议将不胜感激。