Python 如何将链接(或连接)与pyftpdlib一起使用?

Python 如何将链接(或连接)与pyftpdlib一起使用?,python,ftp,pyftpdlib,Python,Ftp,Pyftpdlib,我想在我的FTP服务器上提供非常特定的文件,所以我正在创建一个临时目录并将文件复制到其中。但是,对于较大文件的目录,我更愿意在根目录中添加指向该目录的链接或连接,以节省时间。但是,pyftpdlib会主动阻止客户端打开该目录,说它“指向用户根目录之外的路径” 我尝试的内容:正如您在下面看到的,我尝试了不同类型的链接(每种链接产生的结果都略有不同。由于连接似乎是最有希望的路径,因此我将其保留在[.with os.symlink(),该目录在客户机中显示为平面文件])。我在文档中查找了允许链接的选项

我想在我的FTP服务器上提供非常特定的文件,所以我正在创建一个临时目录并将文件复制到其中。但是,对于较大文件的目录,我更愿意在根目录中添加指向该目录的链接或连接,以节省时间。但是,pyftpdlib会主动阻止客户端打开该目录,说它“指向用户根目录之外的路径”

我尝试的内容:正如您在下面看到的,我尝试了不同类型的链接(每种链接产生的结果都略有不同。由于连接似乎是最有希望的路径,因此我将其保留在[.with os.symlink(),该目录在客户机中显示为平面文件])。我在文档中查找了允许链接的选项或用户权限,但没有

作为一个客户机,我使用了浏览器(Edge)和Python的ftplib,它们都表现出相同的行为

我的代码:

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”。我假设日志中有一个错误-“/”是用户的根目录,根据定义它不在外部。)