Просмотр изображений в браузере без расширения - PullRequest
0 голосов
/ 04 марта 2011

В моем веб-приложении есть каталог, в котором я хочу сохранить все изображения профиля пользователя.Пользователи могут загружать все типы изображений (PNG, JPG, GIF).Тем не менее, я хочу, чтобы URL изображения был дружелюбным, например.http://example.com/static/picture/300-username, где файл с 300-ю именем пользователя, но без расширения.Я думал об удалении расширения при загрузке пользователем, и с помощью контроллера PHP добавьте:

header('Content-Type: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png');
readfile('http://example.com/static/picture/300-username');

Это сработало хорошо.Мне было интересно, однако, если это можно сделать, поместив файл .htaccess в каталог изображений с каким-либо заголовком, который любой файл, читаемый в этом каталоге, будет отображаться как изображение.Это возможно?

Ответы [ 3 ]

5 голосов
/ 05 марта 2011

Не удаляйте расширение, просто предлагайте URI без расширений, например /static/picture/300-username.Затем добавьте строку в ваш .htaccess:

Options +MultiViews

Apache установит правильный тип контента для вас.См. Документацию для Согласование содержания .

1 голос
/ 04 марта 2011

Вы не можете указать несколько Content-Type как этот. Вам нужно передать правильный заголовок для каждого обслуживаемого изображения:

<?php
    $user = '300-username';
    $picture = 'http://example.com/static/picture/' . $user;
    $info = getimagesize($picture);
    $fp = fopen($picture, "rb");
    if ($info && $fp) {
        header("Content-type: {$info['mime']}");
        fpassthru($fp);
        exit;
    } else {
        // error
    }
?>

(Код, адаптированный из PHP getimagesize () документация.)

0 голосов
/ 04 марта 2011

Во-первых, ваш путь должен существовать физически, иначе я не думаю, что Apache может что-то для вас сделать.

Однако, здесь может быть обходной путь, использующий RewriteRule, сохраните расширение (с помощьюКстати, я считаю плохой практикой удалять расширения файла, особенно если они не являются текстовыми файлами), и принимать запрошенный файл, например 300-username, для перезаписи на 300-username.jpg.

...