【发布时间】:2020-02-25 14:42:45
【问题描述】:
我正在尝试使用 react 前端和 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 文件时,问题就出现了。下面是一个不起作用的代码 sn-p:
@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?我不认为会是这种情况,因为处理仍然应该在同一个端点上完成(注意端点在同一个地方),但是 CORS 显然不喜欢使用 yaml.load() 函数。任何关于能够在我的后端加载 yaml 文件的建议将不胜感激。
【问题讨论】:
-
您能否在浏览器控制台中检查浏览器发送到 API 的 OPTIONS 调用标头并添加这些标头?
标签: python cors pyyaml fastapi