当任何其他文件作为附件发送时,如何使图像内联发送?

时间:2011-08-27 10:42:46

标签: php header

我有一个简单的问题。我正在寻找下载文件的功能。我找到了一个,但我的问题很小。

首先,这是一些功能代码:

header ('Content-type: ' . mime_content_type($file));
header ('Content-Disposition: attachment; filename="'.basename($file).'"');
header ('Expires: '.gmdate("D, d M Y H:i:s", mktime(date("H")+2, date("i"), date("s"), date("m"), date("d"), date("Y"))).' GMT');
header ('Accept-Ranges: bytes');
header ('Cache-control: no-cache, must-revalidate');
header ('Pragma: private');

为了测试我正在使用的功能:

$file = 'path/file.rar';
dowload_file($file);

它工作正常,文件正在下载。但是,如果我使用图像功能,例如:

$file = 'path/image.jpg';
download_file($file);

然后图像也会下载。但是我想让它被查看而不是下载。

如果我删除此行:

header ('Content-Disposition: attachment; filename="'.basename($file).'"');

图像立即显示,但rar和zip文件已停止下载。

那么如何在不下载但是下载任何其他文件的情况下显示图像?我在localhost上测试,可能这是问题吗?

4 个答案:

答案 0 :(得分:0)

如果Content-Disposition标头设置为attachment,则无论文件类型如何,都会强制下载。

如果您希望以不同方式处理图片,则必须在Content-Disposition标题上添加条件,例如:

if (!preg_match('@\.(gif|jpe?g|png)$@', basename($file)) {
    // this is *not* an image, do C-D: attachment header
    header ('Content-Disposition: attachment; filename="'.basename($file).'"');
} // otherwise do nothing

答案 1 :(得分:0)

您必须在可以在浏览器中查看并且应该下载的文件上添加条件语句。对于图像和xml文件,您可以提供不使用内容处置作为附件的条件。对于其他人包括它。

答案 2 :(得分:0)

您可以尝试根据文件类型进行切换。如果您采用文件的扩展名:

$ext = pathinfo($file, PATHINFO_EXTENSION);

然后您可以将图像列入白名单:

if($ext != 'gif' && $ext != 'jpg' && $ext != 'png' && $ext != 'jpeg')
{
    header ('Content-Disposition: attachment; filename="'.basename($file).'"');
}

或者,将您的下载列入白名单:

if($ext == 'rar')
{
    header ('Content-Disposition: attachment; filename="'.basename($file).'"');
}

答案 3 :(得分:0)

  

我在localhost上测试,可能这是问题吗?

不。不是localhost,但逻辑是你的问题。

如果要显示图像,请注意显示图像的功能,而不是下载文件。这是不同的任务。

实际上,要显示图像,您必须发送的唯一标题是正确的内容类型。