如何解决如何在pyftpdlib中使用链接或结点?
我想在我的FTP服务器上提供非常特定的文件,所以我要创建一个临时目录并在其中复制文件。但是,对于较大文件的目录,我希望在根目录中向该目录添加链接或连接以节省时间。但是,pyftpdlib主动阻止客户端打开该目录,说它“指向用户根目录之外的路径。”
我尝试的方法:如您在下面看到的,我尝试了各种类型的链接(每个链接都会产生略有不同的结果。由于结点似乎是最有希望的路径,因此我将[。]留给了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,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.
(是的,它说“ /”,在这里人们期望“ / Large”。我假设日志记录中有错误-“ /” 是用户的根目录,根据定义不在外面。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。