强制锚点href将八位字节流视为图像?

时间:2013-08-06 19:02:29

标签: html image mime-types

我有一些图像错误地存储在S3上,MIME类型为application/octet-stream。当我将这些图像放在带有锚点的网站上,即<a href="imgurl"时,图像会自动下载而不是在浏览器中查看。

是否有解决此问题并强制浏览器将链接视为图像?

1 个答案:

答案 0 :(得分:1)

我不知道为什么MightyPork删除了他的答案,但基本的想法是在PHP中创建一个代理,它将为您提供具有正确MIME类型的文件。

<?php

function error403() {
  header('HTTP/1.0 403 Forbidden');
  die('You are not allowed to access this file.');     
}

function serveFile($file, $mimeType) {
  header('Content-Type: ', $mimeType);
  header('Content-Length: ', filesize($file));

  readfile($file);
}

function determineMimeType($file) {
  $mimeMap = array(
    'png' => 'image/png',
    'jpg' => 'image/jpeg',
    'jpeg' => 'image/jpeg',
    'gif' => 'image/gif'
  );
  $fileExt = strtolower(pathinfo($path, PATHINFO_EXTENSION));
  if (isset($mimeMap[$fileExt])) {
    return $mimeMap[$fileExt];
  }
  return false;
}

// entry point
$whitelist = array('test1.png', 'test2.png');
$filePath = isset($_GET['file']) ? $_GET['file'] : error403();

if (!in_array($filePath, $whitelist)) {
  error403();
}

$mime = determineMimeType($filePath);
if ($mime === false) {
  // error handling, logging, etc.
}
serveFile($filePath, $mime);