我有一些图像错误地存储在S3上,MIME类型为application/octet-stream
。当我将这些图像放在带有锚点的网站上,即<a href="imgurl"
时,图像会自动下载而不是在浏览器中查看。
是否有解决此问题并强制浏览器将链接视为图像?
答案 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);