如何解决快速 Api 将本地文件位置传递给要上传到服务器的功能
我正在制作一个带有快速 API 的端点,以便在单个请求中上传多个文件。
要获取多个文件,请使用它。
files: List[UploadFile] = File(...),
我还有另一个函数负责将文件上传到 sftp:
def save_to_sftp(self,file) -> str:
hostname = "0.0.0.0"
username = "foo"
password = "pass"
localfile = "/home/UserName/" + file.filename
remotefile = "root/" + file.filename
try:
transport = paramiko.Transport(hostname,22)
transport.connect(username=username,password=password)
sftp = paramiko.SFTPClient.from_transport(transport)
sftp.put(localpath=localfile,remotepath=remotefile)
sftp.close()
transport.close()
return file.filename
except Exception as err:
raise ValueError(err)
现在要将文件上传到 sftp,我需要将要发送到服务器的文件的位置,但直到现在我不明白如何做到这一点。
我想要关于如何将本地文件位置发送到我的脚本的任何建议,或者关于如何上传文件的任何建议。
谢谢
解决方法
使用 SFTPClient.putfo()
代替使用 SFTPClient.put()
,它会将类文件对象的内容复制到远程 SFTP 服务器。
所以你的路径操作函数可以这样做:
@app.post('/bulk/')
async def bulk_upload(files: List[UploadFile] = File(...)):
for file in files:
save_to_sftp(file.file)
return {'bulk_upload': 'OK'}
在save_to_sftp()
中:
sftp.putfo(file,remotepath=remotefile
您可能希望让 save_to_sftp()
函数接受文件列表,以避免在要保存多个文件时创建多个 SFTP 连接。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。