我的ftp服务器中有一个文件夹,其中包含多个图像。我正在尝试访问并在网页中显示这些图像,如
<img src="ftp://my_ftp_ip_address/Images/imagename.jpg"/>
但它需要FTP用户名和密码。我怎样才能做到这一点?也可以使用JSP进行同样的操作吗?
使用最新版本的网络浏览器(Chrome59,火狐61),您甚至不能使用ftp://
URL来检索图像。不管怎样,这从来都不是一个好的解决方案。
正确的解决方案是通过Web服务器路由映像,不仅要隐藏凭据,还要隐藏映像的原始源。
创建一个用作图像源的脚本(PHP或您使用的任何其他脚本)(您将在
在PHP中实现这样一个脚本(比如image.PHP
)最简单的方法是:
<?
header('Content-Type: image/jpeg');
echo file_get_contents('ftp://username:password@ftp.example.com/path/image.jpg');
然后在HTML中使用它,如:
<a src="image.php" />
(假设image.php
与HTML页面位于同一文件夹中)
该脚本使用FTP URL包装器。如果在Web服务器上不允许这样做,则必须使用FTP函数。请参见PHP:如何将文件从FTP服务器读取到变量中?
虽然要获得真正正确的解决方案,您应该提供一些与文件相关的HTTP头,如内容长度
、内容类型
和内容处置
。为此,请参阅通过PHP脚本将文件从FTP服务器下载到带有内容长度标题的浏览器,而不将文件存储在web服务器上。
在实践中,您可能会有更多的图像,因此您不会在脚本中使用硬编码的文件名,但是脚本将使用该名称作为参数。
请参阅列表并从FTP下载单击的文件
您告诉浏览器使用ftp协议访问图像,这就是它尝试登录的原因。
将ftp://更改为http://(或https://如果使用ssl)以访问图像。
当然,您也可以将用户名和密码添加到图像中,但这样每个人都可以查看您的代码并登录到ftp服务器。。。不太安全;)
您可以尝试如下方式修改src属性:
<img src="ftp://username:password@my_ftp_ip_address/Images/imagename.jpg"/>