快速 Api 将本地文件位置传递给要上传到服务器的函数

Fast Api passing local file location to function to be upload to a server

我正在制作一个具有快速 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.put(),而是使用 SFTPClient.putfo(),这会将类文件对象的内容复制到远程 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 连接。