我使用FastAPI接收图像,处理它,然后将图像作为FileResponse返回。
但返回的文件是临时文件,需要在端点返回后删除。
@app.post("/send")
async def send(imagem_base64: str = Form(...)):
# Convert to a Pillow image
image = base64_to_image(imagem_base64)
temp_file = tempfile.mkstemp(suffix = '.jpeg')
image.save(temp_file, dpi=(600, 600), format='JPEG', subsampling=0, quality=85)
return FileResponse(temp_file)
# I need to remove my file after return it
os.remove(temp_file)
我如何删除文件后返回它?
4条答案
按热度按时间uwopmtnx1#
您可以删除background task中的文件,因为它将在 * 响应发送后 * 运行。
另一种方法是使用dependency with yield。
finally
块代码将在响应发送后执行,甚至在所有后台任务完成后执行。t1qtbnec2#
可以将cleanup任务作为
FileResponse
的参数传递:更新12-08-2022
如果某人动态地生成文件名,则可以将参数传递给后台任务,例如如下
然后需要调整
cleanup
函数以接受一个参数(将是文件名),并使用文件名作为参数而不是全局变量来调用os.remove
函数3lxsmp7m3#
建议发送
FileResponse
并附加一个删除文件或文件夹的后台任务。click here更多信息
后台任务将在响应完成后运行,因此它可以安全地删除文件/文件夹。
goqiplq24#
为了确保在请求后删除临时文件,以及在请求中途意外失败时,建议使用FastAPI的Dependency Injection系统: