Python 如何将链接(或连接)与pyftpdlib一起使用?
我想在我的FTP服务器上提供非常特定的文件,所以我正在创建一个临时目录并将文件复制到其中。但是,对于较大文件的目录,我更愿意在根目录中添加指向该目录的链接或连接,以节省时间。但是,pyftpdlib会主动阻止客户端打开该目录,说它“指向用户根目录之外的路径” 我尝试的内容:正如您在下面看到的,我尝试了不同类型的链接(每种链接产生的结果都略有不同。由于连接似乎是最有希望的路径,因此我将其保留在[.with os.symlink(),该目录在客户机中显示为平面文件])。我在文档中查找了允许链接的选项或用户权限,但没有 作为一个客户机,我使用了浏览器(Edge)和Python的ftplib,它们都表现出相同的行为 我的代码:Python 如何将链接(或连接)与pyftpdlib一起使用?,python,ftp,pyftpdlib,Python,Ftp,Pyftpdlib,我想在我的FTP服务器上提供非常特定的文件,所以我正在创建一个临时目录并将文件复制到其中。但是,对于较大文件的目录,我更愿意在根目录中添加指向该目录的链接或连接,以节省时间。但是,pyftpdlib会主动阻止客户端打开该目录,说它“指向用户根目录之外的路径” 我尝试的内容:正如您在下面看到的,我尝试了不同类型的链接(每种链接产生的结果都略有不同。由于连接似乎是最有希望的路径,因此我将其保留在[.with os.symlink(),该目录在客户机中显示为平面文件])。我在文档中查找了允许链接的选项
import _winapi, tempfile, os, sys, logging
from pyftpdlib import servers
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.authorizers import DummyAuthorizer
logging.basicConfig(level=logging.WARNING,\
format=
'%(asctime)s.%(msecs)03d|%(levelname)s|%(funcName)s:%(lineno)d|%(message)s',\
datefmt='%Y-%m-%d %H:%M:%S')
ftp_logger = logging.getLogger('pyftpdlib')
ftp_logger.setLevel( logging.DEBUG )
large_dir = sys.argv[1]
with tempfile.TemporaryDirectory() as tempdir:
os.mkdir(tempdir+'\\small')
# copy small files
#os.symlink( large_dir, dir+'\\Large', target_is_directory=False )
#os.symlink( large_dir, dir+'\\Large', target_is_directory=True )
_winapi.CreateJunction( large_dir, tempdir+'\\Large' )
authorizer = DummyAuthorizer()
os.chdir( tempdir )
authorizer.add_anonymous(".")
handler = FTPHandler
handler.authorizer = authorizer
address = ("0.0.0.0", 21) # listen on every IP on my machine on port 21
ftp_server = servers.FTPServer(address, handler)
ftp_server.serve_forever()
日志中的相关代码段:
2020-10-07 17:01:17.110|DEBUG|logline:1845|127.0.0.1:64812-[anonymous] <- CWD /Large/
2020-10-07 17:01:17.111|DEBUG|logline:1845|127.0.0.1:64812-[anonymous] -> 550 "/" points to a path which is outside the user's root directory.
2020-10-07 17:01:17.110 | DEBUG | logline:1845 | 127.0.0.1:64812-[anonymous]550“/”指向用户根目录之外的路径。
(是的,它说的是“/”where one expected“/Large”。我假设日志中有一个错误-“/”是用户的根目录,根据定义它不在外部。)