添加到前面提到的代码中,我发现放置另一个响应标头很有用,以便客户端能够看到“Content-Disposition”。这是因为默认情况下,客户端只能看到 CORS 安全列表中的响应标头。“Content-Disposition”不在此列表中,因此必须明确添加https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Expose-Headers。
我不知道是否有另一种方法可以为客户端或服务器以更通用的方式指定它,以便它适用于所有必要的端点,但这是我应用它的方式。
@router.post("/files", response_class = StreamingResponse)
async def anonymization(file: bytes = File(...), config: str = Form(...)):
# file as str
inputFileAsStr = StringIO(str(file,'utf-8'))
# dataframe
df = pd.read_csv(inputFileAsStr)
# send to function to handle anonymization
results_df = anonymize(df, config)
# output file
outFileAsStr = StringIO()
results_df.to_csv(outFileAsStr, index = False)
response = StreamingResponse(
iter([outFileAsStr.getvalue()]),
media_type='text/csv',
headers={
'Content-Disposition': 'attachment;filename=dataset.csv',
'Access-Control-Expose-Headers': 'Content-Disposition'
}
)
# return
return response