我有FTP,我需要在上载目录中列出FTP中的所有文件,单击任何列出的文件后,它将从FTP下载特定文件。
它在上载目录中列出了我的文件,但是当我尝试下载文件时,它会键入“没有文件”
我的代码:
// connect and login to FTP server
$ftp_server = "IP";
$ftp_conn = ftp_connect($ftp_server) or die("Could not connect to $ftp_server");
$login = ftp_login($ftp_conn, "name", "password");
// list all files in upload directory and with "a" download file from FTP
$target_dir = "uploads/";
$files = ftp_nlist($ftp_conn, $target_dir);
foreach($files as $file) {
echo "<a href='$file' download>$file</a>";
echo "<br>";
}
您在生成的<a>
标记中的链接指向不包含链接文件的Web服务器。
您需要做的是链接到PHP脚本,并为其指定要下载的文件的名称。然后,脚本将从FTP服务器下载文件,并将下载的文件传递回用户(至Web浏览器)。
echo "<a href=\"download.php?file=".urlencode($file)."\">".htmlspecialchars($file)."</a>";
download.php
脚本的一个非常简单的版本:
<?
header('Content-Type: application/octet-stream');
echo file_get_contents('ftp://username:password@ftp.example.com/path/' . $_GET["file"]);
该download.php
脚本使用FTPURL包装器。如果您的Web服务器上不允许这样做,则必须更努力地使用FTP功能。
虽然一个真正正确的解决方案,你应该提供相关文件,像一些HTTP头Content-Length
,Content-Type
和Content- Disposition
。
同样,上面的简单示例将首先将整个文件从FTP服务器下载到Web服务器。只有这样,它才会开始将其流式传输给用户(Web浏览器)。这既浪费时间,又浪费网络服务器上的内存。
有关更好的解决方案,请参阅通过PHP脚本从FTP服务器将文件下载到具有Content-Length标头的浏览器,而不将文件存储在Web服务器上。
您可能还想自动检测Content-Type
,除非您的所有文件都属于同一类型。
我有这个代码来下载一个文件。 这是服务器和密码的一部分。 简单的填充下载,但此行出错 它给了我错误,我希望你能理解我现在面临的问题 java.net.SocketExc0019:软件导致连接中止:套接字写入错误在java.net.SocketOutputStream.socketWrite0(本地方法)在java.net.SocketOutputStream.socket写入(SocketOutp
我正试图下载一些公共数据文件。我通过screensrap获取指向文件的链接,这些文件看起来都是这样的: 我在Requests library网站上找不到任何文档。
我有一个AWS EC2实例作为FTP服务器,如下所述: https://www.xadmin.net/how-to-setup-ftp-on-aws-ec2-instance/ EC2实例有一个具有自定义TCP规则的安全组,以允许来自任何IP的连接。 通过FileZilla和其他FTP客户端的连接成功。 我有一个Spring Boot应用程序,它连接到这个EC2 FTP服务器,并且在本地工作。但是
作为一名新的程序员,我一直在做大量的尝试和错误,并坚持使用那些有效的发现,但我目前使用的方法并不适用于所有浏览器。 我们的PHP代码。 HTML下载按钮。 你可以看到我使用的是Html5和上面的Javascript方法,这意味着它只支持FireFox和GoogleChrome。 如何允许所有浏览器上的用户点击我们的按钮下载文件?
我必须从FTP服务器下载最新文件。我知道如何从我的计算机下载最新文件,但我不知道如何从FTP服务器下载。 如何从FTP服务器下载最新文件? 这是我从电脑上下载最新文件的程序 好的,使用此代码我知道最后一个文件的日期,但我如何知道这个文件的名称?????????
我有一个关于C#的ftp库的问题。我需要从ftp服务器下载9000个txt文件。火车站ToUpper()是文件名,因此对于每个文件,我都需要一个新的ftp连接。对于一个文件,大约需要一秒钟。txt文件包含两行。因此,对于所有文件,大约需要一个半小时。是否有更好/更快的解决方案?