我通过 POST 接受文件。当我保存到本地时,我可以使用file.read()读取内容,但是显示的是via file.name incorrect(16) 的名称。当我试图用这个名字找到它时,我得到了一个错误。可能是什么问题?
我的代码:
@router.post(
path="/upload",
response_model=schema.ContentUploadedResponse,
)
async def upload_file(
background_tasks: BackgroundTasks,
uploaded_file: UploadFile = File(...)):
uploaded_file.file.rollover()
uploaded_file.file.flush()
#shutil.copy(uploaded_file.file.name, f'../api/{uploaded_file.filename}')
background_tasks.add_task(s3_upload, uploaded_file=fp)
return schema.ContentUploadedResponse()
原文由 Fyzzys 发布,翻译遵循 CC BY-SA 4.0 许可协议
背景
UploadFile
只是SpooledTemporaryFile
的包装器,可以作为UploadFile.file
访问。关于
TemporaryFile
文档 说:async def
端点You should use the following async methods of
UploadFile
:write
,read
,seek
andclose
.它们在线程池中执行并异步等待。对于将文件异步写入磁盘,您可以使用
aiofiles
。例子:或者以分块的方式,以免将整个文件加载到内存中:
def
端点此外,我想引用本 主题 中的几个有用的实用程序函数(所有学分@dmontagu)使用
shutil.copyfileobj
和内部UploadFile.file
。可以从def
端点调用此函数: