如何访问和显示位于应用程序文件夹之外的图像?假设我有一个存储所有图像和其他文件类型的文件目录,并且此文件目录位于与我的应用程序文件夹不同的驱动器上。对于某些文件类型(例如.pdf,.doc,我想提示用户下载这些文件)。
据我所知,不可能将绝对路径放在<img src
属性中,即img src="D:\\file directory">
不起作用。还有我想限制只有登录用户的访问。
我使用PHP作为我的服务器端语言。
注意: <img src="file:/// .../>
won't work in Firefox。请参阅此处comments。
编辑:由于只有经过身份验证的用户才能访问这些图片,并且由于我有一个index.php来检查所有传入的请求,因此过滤掉未经过身份验证的用户,我认为创建Apache Alias不会工作
以下是我的conf文件示例:
NameVirtualHost *:80
<VirtualHost *:80 >
ServerName pmmenu.businessjob.net
DocumentRoot "D:\web"
DirectoryIndex index.html index.php
<Directory "D:\web">
AddDefaultCharset UTF-8
Order Deny,Allow
Allow from all
RewriteEngine on
RewriteBase /
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
# no, so we redirect to our front web controller
RewriteRule ^(.*)$ index.php [QSA,L]
</Directory>
</VirtualHost>
答案 0 :(得分:6)
我认为你在这里错过了一个基本概念。所有HTML都在客户端解释。每个图像都是由访问者的浏览器单独下载的。由于访问者只能访问那些公开的文件,“file:/// something”对他们不起作用,因为这会要求他们的浏览器访问本地(他们的)文件系统,这些文件系统将被阻止或找不到请求的文件系统图像,因为它没有存储在他们的磁盘上。
因此,您必须发布这些图片并通过http访问它们,以便访问者可以看到它们。您可以通过创建子域或虚拟目录来完成此操作。
由于您只希望经过身份验证的用户能够看到它们,因此您还可以创建一个用于检查用户是否经过身份验证的php文件,例如:像这样:
if(user_is_authenticated()){
$pathToFile = "d:\images\myimage.jpg";
$handle = @fopen($pathToFile, "rb");
$contents = @fread($handle, filesize($pathToFile));
@fclose($handle);
//sent appropriate header
header('Content-type: image/jpeg');
echo $contents;
}
但你必须要知道,这个脚本将始终读取整个图像并随后打印,这是一个巨大的开销。
答案 1 :(得分:1)
尝试创建保存图像的文件夹的虚拟目录,并将其用作链接到文件夹的链接。如果使用IIS(虚拟目录),如果是apache(虚拟主机)。 Google上有很多教程
答案 2 :(得分:1)
从php提供文件总是坏主意。如果你可以在apache使用http://kovyrin.net/2006/11/01/nginx-x-accel-redirect-php-rails/lang/en/
之前安装nginx否则使用apache模块:http://john.guen.in/past/2007/4/17/send_files_faster_with_xsendfile/
另一个解决方案 - 创建单独的符号链接(作为奖励,您将能够提供日期限制链接,清除cron中的符号链接)。
答案 3 :(得分:0)
我目前无法测试这些理论中的任何一种,但我很确定你可以将img src链接到一个php脚本: