记录下最近遇到的 代码透传问题
最近新建了一个系统,部分接口需要沿用原来系统的接口,采用直接透传的方式,所以需要写一个通过python后端进行文件上传接口调用的代码,但是遇到了一些问题,主要是不知道如何传参。在此记录下代码和解决思路
话不多说,直接上代码
多个UploadFile文件上传调用
def upload_file(files: list[UploadFile] = File(..., description="多文件上传,只支持docx、pdf、pptx文件"),
classification:str = Body(description="行业分类"),
id: str = Body(description="请求标识,请求序列号")
):
logger.info(f"上传文件个数:{len(files)},入参:id={id},classification={classification},userId={userId}")
files = files_tmp=[]
#关键在于这个files参数的组装,这里是传的元组
for file in files:
files_tmp.append(("files",(file.filename,asyncio.run(file.read()),file.content_type)))
response = requests.post(url=BASE_URL +"/search/file_upload",files=files_tmp,
data={"classification":classification,"userId":userId,"id":id})
logger.info(f"返回数据:{response.text}")
return response.text
files是一个数组,里面的对象是:
(“files”,(file.filename,asyncio.run(file.read()),file.content_type))
你可能会问,我咋知道这个参数应该真么传呢?
我一开始也是在网上找了很多资料,参考别人的,后面我发现在requests源码里其实有说明(遇到不会的问题,还是要多看看源码),
这是我找到的源码截图:
这里对files的内容进行了说明,它是一个list,里面是元组,元组包含了文件名、文件对象、文件类型,这三部分
以上就是代码和解决思路,有用的话希望点赞收藏哈