FTP将文件复制到同一FTP中的其他位置

FTP将文件复制到同一FTP中的其他位置,ftp,Ftp,我需要上传相同的文件到2个不同的地方在同一个FTP。有没有办法将FTP上的文件复制到其他地方,而不是再次上传?谢谢。我认为没有办法不下载和重新上传就复制文件,至少我在中没有发现类似的东西,到目前为止,我所看到的客户端都不支持类似的东西。是的,FTP协议本身在理论上可以支持这一点。第5.2节对此进行了讨论(参见以“当数据在两台服务器之间传输时,A和B…”开头的段落)。然而,我不知道有哪个客户端提供这种双服务器控制操作 请注意,此方法可以使用自己的网络将文件从FTP服务器传输到自身,其速度不如本地文

我需要上传相同的文件到2个不同的地方在同一个FTP。有没有办法将FTP上的文件复制到其他地方,而不是再次上传?谢谢。

我认为没有办法不下载和重新上传就复制文件,至少我在中没有发现类似的东西,到目前为止,我所看到的客户端都不支持类似的东西。

是的,FTP协议本身在理论上可以支持这一点。第5.2节对此进行了讨论(参见以“当数据在两台服务器之间传输时,A和B…”开头的段落)。然而,我不知道有哪个客户端提供这种双服务器控制操作


请注意,此方法可以使用自己的网络将文件从FTP服务器传输到自身,其速度不如本地文件副本快,但几乎肯定比下载然后重新加载文件快。

我通过使用WebDrive将FTP装载为本地文件夹,然后“下载”来实现这一点使用filezilla将文件直接发送到文件夹。这比正常下载慢了一点,但您不需要在硬盘上留有空间。

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

例如: 如果要将文件“file.txt”移动到文件夹“NewFolder”中,可以将其写入

ftp> rename file.txt NewFolder/file.txt

这对我很有用。

在基于Linux的系统中,我可以在远程文件夹之间复制文件。 在我的特殊情况下,我使用非常常见的文件管理器PCManFM:

  • 菜单“转到”-->“连接到服务器”
  • FTP登录信息等
  • 在PCManFM中打开新选项卡
  • 连接到同一服务器
  • 从一个选项卡复制到另一个选项卡

它有点慢,所以我想它可能是下载和上传文件,但它是自动完成的,而且非常方便用户。

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


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

例如,使用拖放和菜单/键盘命令:

  • 它支持
    SITE CPFR
    /
    CPTO
    FTP扩展(例如由支持)
  • 如果上述扩展不可用,它将返回到通过本地临时副本的自动复制
(我是WinSCP的作者)


另一个解决方法是打开到FTP服务器的第二个连接,并通过管道将被动模式数据连接连接到主动模式数据连接,使服务器将文件上载到自身。此解决方案如中所示。这基本上是使用,但只针对一台服务器。尽管许多FTP服务器会拒绝这种做法,因为它们不允许与客户机地址不同的地址进行数据连接



旁注:人们经常混淆移动和复制。如果你真的想搬家,那是一个完全不同的问题。广泛支持在FTP上移动文件。

您可以从C面板上执行此操作

  • 登录到您的C面板
  • 进入文件管理器
  • 找到要复制的文件或文件夹
  • 右键单击并选择“复制”
  • 键入要复制到的新控制器
    完成了

    下面的代码使FTP服务器将文件上载到自身(使用环回连接)。它需要FTP服务器来允许被动和主动连接模式

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

    函数copyFile($filePath,$newFilePath)
    {
    $ftp1=ftp_connect('192.168.1.1');
    $ftp2=ftp_connect('192.168.1.1');
    ftp_原始($ftp1,“用户ftpUsername”);
    ftp_原始($ftp1,“传递我的密码”);
    ftp_原始($ftp2,“用户ftpUsername”);
    ftp_原始($ftp2,“传递我的密码”);
    $res=ftp_原始($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_原始($ftp1,“端口”。$addressAndPort);
    ftp_raw($ftp1,“STOR”.basename($newFilePath));
    ftp_raw($ftp2,“RETR.basename($filePath));
    ftp_原始($ftp1,“退出”);
    ftp_原始($ftp2,“退出”);
    }
    
    下面是另一种解决方法,使用PHP cUrl在服务器上执行复制请求,方法是从本地计算机输入参数并报告结果:

    本地代码: 在这个简单的测试程序中,我想将斜塔照片复制到正确的文件夹Pisa:

    $ch = curl_init();
    $data = array ('pic' => 'leaningtower', 'folder' => 'Pisa');
    curl_setopt($ch, CURLOPT_URL,"http://travelphotos.com/copypic.php");
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch,  CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    $result = curl_exec($ch);
    curl_close($ch);
    echo $result;
    
    服务器代码(copypic.php): 在远程服务器上,我有简单的错误检查。在这台服务器上,我必须处理路径指定,也就是说,我必须使用“/”作为可接受的路径引用,因此您可能需要对其进行一些修改

    $pic = $_POST["pic"];
    $folder = $_POST["folder"];
    if (!$pic || !$folder) exit();
    
    $sourcePath = "./unsortedpics/".$pic.".jpg";
    $destPath =   "./sortedpics/".$folder."/".$pic.".jpg";
    
    if (!file_exists($sourcePath )) exit("Source file not found");
    if (!is_dir("./sortedpics/".$folder)) exit("Invalid destination folder");
    if (!copy($sourcePath , $destPath)) exit("Copy not successful");
    echo "File copied";
    

    我想知道你是否使用了这个和指定的localhost,如果你能绕过这个小瓶颈的话。即便如此,我们需要考虑到许多FTP服务器阻止FXP(也称为服务器到服务器传输),因为“FTP反弹攻击”。但是智能FTP服务器不会为本地主机阻止它。不过,它可能只是阻止所有FXP。这没有抓住问题的重点-OP明确询问的是复制,而不是移动。我认为它仍然会暂时将文件下载到您的机器上,然后立即将其上载到您的webdrive。我想你仍然需要足够的磁盘空间来实现这一点。我想感谢你提供了一个很棒的工具WinSCP。1)不要在你的帖子中留下“签名”,这就是你的C-Panel个人资料仅在非常特殊的情况下可用的地方。@MartinPrikryl好吧,让我告诉你它确实有效,因为我个人在一个Synology Nas上使用它。此外,它确实回答了这个问题,因为您只需要将您的文件上传到ftp一次,然后使用我的功能将其复制到您想要的任何地方,而无需再次上传。请下次再来