gpt4 book ai didi

python - 在 Flask 中提供使用 Paramiko SFTP 下载的文件

转载 作者:行者123 更新时间:2023-12-01 04:35:09 25 4
gpt4 key购买 nike

我编写了一个 Flask 应用程序来浏览具有 Paramiko 的 SFTP 支持的远程系统。我希望客户端在浏览时能够下载远程文件。如何使用 Paramiko 下载文件并通过 Flask 进行服务器处理?

@app.route('/download/path:<path:to_file>/')
def download(to_file):
ssh = paramiko.SSHClient()
privatekeyfile = os.path.expanduser(key)
mykey = paramiko.RSAKey.from_private_key_file(privatekeyfile)
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=host, username=user, pkey=mykey)
transfer = ssh.open_sftp()

# what do I do here to get the file and serve it?
download = transfer.~SOME_MAGIC~(to_file)
return download

最佳答案

使用SFTPClient.getfo从远程路径复制文件,然后发送包含数据的响应。使用SpooledTemporaryFile如果数据太大,则将数据存储在内存或临时文件中。

import os
from tempfile import SpooledTemporaryFile
from flask import Flask
from paramiko import SSHClient

app = Flask(__name__)

@app.route('/remote_download/<path:path>')
def remote_download(path):
client = SSHClient()
client.connect('host')
transfer = client.open_sftp()

with SpooledTemporaryFile(1024000) as f: # example max size before moving to file = 1MB
transfer.getfo(path, f)
f.seek(0)
r = app.response_class(f.read(), mimetype='application/octet-stream')

r.headers.set('Content-Disposition', 'attachment', filename=os.path.basename(path))
return r

app.run()

您应该执行一些操作来检查路径是否有效,否则如果路径类似于 ../sibling/path/secret.txt,则会出现安全问题。

关于python - 在 Flask 中提供使用 Paramiko SFTP 下载的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31833824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com