我需要将同一文件上传到同一FTP的2个不同位置。 有没有办法将FTP上的文件复制到另一个位置,而不是再次上传? 谢谢。

斯坦 自从他问了这个简单的问题以来已经7年了,而每个人都必须努力完成这项任务已经7年了。 FTP仅允许重命名,并且没有"从副本复制为"命令,因此两次将相同名称的文件上载两次仍然浪费资源。

没有通过FTP协议复制远程文件的标准方法。但是某些FTP服务器为此支持专有或非标准扩展。

一些FTP客户端确实支持远程文件复制。使用扩展名或通过远程文件的临时本地副本。

例如,WinSCP FTP客户端使用拖放和菜单/键盘命令都支持复制:

它支持SITE CPFR / CPTO FTP扩展名(例如,由ProFTPD mod_copy模块支持)

如果上述扩展名不可用,它会通过本地临时副本退回到自动复制。

(我是WinSCP的作者)

另一个解决方法是打开与FTP服务器的第二个连接,并通过将被动模式数据连接传递到主动模式数据连接,使服务器将文件上传到自身。 @SaadAchemlal在答案中显示了此解决方案。这基本上是使用FXP协议,但用于一台服务器。尽管许多FTP服务器会拒绝这样做,因为它们不允许与客户端的地址之间的数据连接。

旁注:人们经常将复制与移动混为一谈。如果您确实要移动,那将是一个完全不同的问题。广泛支持在FTP上移动文件。

我要感谢您提供了出色的WinSCP工具。

我认为没有一种无需下载和重新上传即可复制文件的方法,至少我在FTP命令列表中找不到类似的东西,而且到目前为止,我还没有客户端支持这种东西。

是的,FTP协议本身在理论上可以支持这一点。 FTP RFC 959在5.2节中对此进行了讨论(请参阅以"当要在两个服务器A和B之间传输数据时..."开头的段落)。但是,我不知道有任何提供这种双服务器控制操作的客户端。

请注意,此方法可以使用自己的网络将文件从FTP服务器传输到自身,这不会像本地文件副本那样快,但是几乎可以肯定比下载然后重新上传文件要快。

我想知道您是否使用了此功能并指定了localhost,是否可以解决该较小的瓶颈。即使这样,我们仍然需要考虑到许多FTP服务器由于" FTP反弹攻击"而阻止了FXP(也称为服务器到服务器的传输)。但是,智能FTP服务器不会将其阻止为localhost。尽管如此,它可能只会阻止所有FXP。

下面的代码使FTP服务器可以将文件上传到自身(使用回送连接)。它需要FTP服务器同时允许被动和主动连接模式。

如果您想了解ftp命令,请参见以下列表:ftp命令列表

function copyFile($filePath, $newFilePath)

{

$ftp1 = ftp_connect('192.168.1.1');

$ftp2 = ftp_connect('192.168.1.1');

ftp_raw($ftp1,"USER ftpUsername");

ftp_raw($ftp1,"PASS mypassword");

ftp_raw($ftp2,"USER ftpUsername");

ftp_raw($ftp2,"PASS mypassword");

$res = ftp_raw($ftp2,"PASV");

$addressAndPort = substr($res[0], strpos($res[0], '(') + 1);

$addressAndPort = substr($addressAndPort, 0, strpos($addressAndPort, ')'));

ftp_raw($ftp1,"CWD ." . dirname($newFilePath));

ftp_raw($ftp2,"CWD ." . dirname($filePath));

ftp_raw($ftp1,"PORT".$addressAndPort);

ftp_raw($ftp1,"STOR" . basename($newFilePath));

ftp_raw($ftp2,"RETR" . basename($filePath));

ftp_raw($ftp1,"QUIT");

ftp_raw($ftp2,"QUIT");

}

@MartinPrikryl好吧,我告诉您它确实有效,因为我是在Synology Nas上亲自使用此功能的。此外,它确实回答了这个问题,因为您只需要一次将文件上传到ftp,并使用我的功能将文件复制到您想要的任何位置,而无需再次上传。请下次尝试先测试解决方案,然后再说不行:)

抱歉,您是对的,我没有仔细阅读代码。尽管下一次,但请在您的帖子中添加一些解释,以免造成混淆。 +1 +我已经将您的答案与我的链接了。

下次我会尝试解释更多。感谢您的编辑;)

Ntb,这基本上是使用FXP协议,但用于一台服务器。

我可以在基于Linux的系统中的远程文件夹之间复制文件。

在我的特定情况下,我使用的是非常常见的文件管理器PCManFM:

菜单"转到"->"连接到服务器"

FTP登录信息等

在PCManFM中打开新标签

连接到同一台服务器

从标签复制到标签...

它有点慢,所以我想它可以下载和上传回文件,但是它是自动完成的,非常用户友好。

我设法通过使用WebDrive将ftp作为本地文件夹挂载,然后使用filezilla直接将文件"下载"到该文件夹??来完成此操作。它比通常的下载速度慢一点,但是您不需要在硬盘上留有空间。

我认为它将仍然将文件临时下载到您的计算机,然后立即将其上传到您的网络驱动器。我怀疑您仍然需要足够的磁盘空间来实现这一目标。

您可以从C-Panel执行此操作。

登录到您的C-Panel。

进入文件管理器。

查找您要复制的文件或文件夹。

右键单击并选择复制。

输入要复制到的新导演。

做完了!

1)不要在您的帖子中留下签名,那就是您的个人资料所在的位置2)C-Panel仅在非常特殊的情况下可用。

您可以将要复制的文件重命名为所需结果的完整路径。

例如:

如果要将文件" file.txt"移动到文件夹" NewFolder"中,可以将其写为

ftp> rename file.txt NewFolder/file.txt

这对我有用。

这遗漏了问题的要点-OP明确询问了有关复制而不是移动的问题

ftp服务器文件复制文件路径,FTP将文件复制到同一FTP的另一个位置相关推荐

  1. 3 配置ftp文件服务器,服务器_用Linux架设FTP服务器(3), 配置“/etc/ftpaccess”文件  - phpStudy...

    用Linux架设FTP服务器(3) 配置"/etc/ftpaccess"文件 "/etc/ftpaccess"文件是用来配置"ftpd"的. ...

  2. 直接读取ftp服务器文件,如何在ftp服务器上只读取十二个文件?

    如何只读取12个文件导致我只读取ftp 服务器中的所有文件,每4分钟文件添加一个新文件.如何在ftp服务器上只读取十二个文件? 感谢您的帮助,我是初学者在API编程:) if(files.length ...

  3. CopyFile复制单个文件和复制指定路径下所有文件

    CopyFile复制单个文件和复制指定路径下所有文件 1.CopyFile复制单个文件 2.CopyFile复制指定路径下所有文件 1.CopyFile复制单个文件 原型: BOOL CopyFile ...

  4. 二章: CentOS6.5 连接FTP服务器、部署telnet服务、安装SCP、服务端FTP、SFTP部署

    1,Client  FTP 安装lftp yum -y install lftp lftp -u hz 192.168.31.64 显示当前目录的FTP服务器 pwd 显示当前目录下的文件在FTP服务 ...

  5. pycharm中.ui文件跨包路径转.py文件

    pycharm中.ui文件跨包路径转.py文件 如下图所示报错: 只需要在上面路径后添加.ui文件所在包(我的.ui文件在package里,但我想生成.py文件并放在package包外边),如下图所示 ...

  6. python文件操作(路径、移动、复制、见目录)

    这一篇记录的比较全: https://www.cnblogs.com/andy-x/p/10144658.html 常用的有以下几个: os.path.exists():函数用来检验给出的路径是否真的 ...

  7. 电脑访问不了虚拟机ftp服务器,解决win环境下访问本机虚拟机中centos7 ftp服务器的问题...

    inux搭建ftp服务器 1.安装软件: yum install vsftpd 2.修改配置文件vsftpd.conf: vim /etc/vsftpd/vsftpd.conf 把anonymous_ ...

  8. asp获取ftp服务器目录并显示_用 Python 快速实现 HTTP 和 FTP 服务器

    「运维之美」原创文章系列 本文首发于:微信公众号「运维之美」,公众号ID:Hi-Linux.「运维之美」是一个有情怀.有逼格,专注于 Linux 运维相关技术实战文章分享的公众号.如果你想第一时间获取 ...

  9. qt保存文件的默认路径_Qt将文件保存到指定目录下(另存为的功能)

    因为Qt才开始入门.对文件的操作还不是很熟练.经过一段时间查找终于找出一些适用于入门的代码. QDir d; d.mkpath("D:/123"); file = new QFil ...

  10. python通过路径找文件_Python寻找路径和查找文件路径的示例

    怎么python系统的查找路径要是爱你爱的少些,话就可以说的多些了.简?奥斯汀 ⒈单击开始,在搜索框输入cmd,然后回车,就会出现命令行界面框后,在里面输入命令python后回车,安装成功的话就可以看 ...

最新文章

  1. mysql分区和分表比较_MySQL分区和分表的区别与联系
  2. Vita Helper v0.08 Build 20140722
  3. js 时间戳转为时间
  4. PostgreSQL学习笔记7之函数和操作符三
  5. [react] 在React中声明组件时组件名的第一个字母必须是大写吗?为什么?
  6. 后台原理_电气控制原理动图22张,超赞!
  7. Ubuntu搭建nfs服务器
  8. linux yum选择版本mysql_linux yum安装指定版本mysql
  9. php 数据库 自增值,Mysql应用MySql数据库自动递增值问题
  10. 推荐 | 一个超好的OpenCV4学习社区
  11. 飞信2016 5.6.8820.0超级精简版
  12. Python办公——三行代码拆分表格
  13. 台积电全球员工薪酬中位数约46万,CEO约899万;苹果上调日本的 iPhone 售价 ;Vim 9.0 发布|极客头条...
  14. 用树莓派控制两盏灯(二)
  15. Docker 架构之Daemon
  16. CPU密集型与IO密集型
  17. 第三章 败家可是个技术活
  18. 解析几何--交点的计算
  19. 嵌入式常用的算法 - 二阶IIR低通滤波器
  20. 机器视觉尺寸检测基础

热门文章

  1. java3D实现空间立方体_CSS3 3D旋转立方体
  2. quartus ModelSim executable not found.
  3. keepalived实现mycat高可用问题排查;道路坎坷,布满荆棘,定让你大吃一惊!
  4. 配置 Eureka Server 集群
  5. 四川大学计算机学院男女生比例,2019年四川各大高校男女比例排行,电子科技大学4比1...
  6. css背景图片和背景颜色一起显示
  7. NFS搭建错误处理:exportfs:No options for /home/source/*(rw,sync,no_root_squash):suggest(sync) to avoid warn
  8. 钉钉isv应用开发(钉钉isv应用开发注意事项)
  9. 账号升级攻略:每天自动升级b站和网易云音乐,自动签到天翼云盘和百度贴吧...
  10. Silvaco TCAD仿真1——TCAD概述