Content-disposition:inline头部无法内联显示图像?

8

我正在尝试在页面上内联显示一张图片。它由CodeIgniter控制器提供服务。

class Asset extends MY_Controller {

    function index( $folder, $file ) {

        $asset = "assets/$folder/$file";

        if ( !file_exists( $asset ) ) {
            show_404();
            return;
        }

        switch ( $folder ) {
        case 'css':
            header('Content-type: text/css');
            break;
        case 'js':
            header('Content-type: text/javascript');
            break;
        case 'images':
            $ext = substr( $file, strrpos($file, '.') );
            switch ( $ext ) {
            case 'jpg':
                $ext = 'jpeg';
                break;
            case 'svg':
                $ext = 'svg+xml';
                break;
            }

            header('Content-Disposition: inline');
            header('Content-type: image/'.$ext);
        }

        readfile( $asset );
    }

}

当我在Chrome或FF中加载图像时,会弹出下载窗口。我知道当浏览器无法内联显示内容时,它会强制进行下载,但这些是PNG和GIF图像,否则在浏览器中可以正常显示。在IE中,它不会强制下载,但它会将图像显示为ASCII。
如果我在FF中注释掉整个图像案例,则FF和Chrome都会显示ASCII,但不显示图像。
我认为设置内容类型将允许FF和Chrome显示实际图像,并允许位置用作src。
当然,javascript和css显示得很好。
有人有任何想法如何使图像正确显示吗?
1个回答

11

尝试删除Content-disposition头部。默认情况下,它们应该以内联方式显示。

无论如何,您可能做错了什么。我刚在Opera和IE中进行了测试,它们确实使用content-disposition头部将图像内联显示。我使用了:

<?php
header('Content-Disposition: inline');
header('Content-type: image/png');

readfile('Untitled.png');

使用您的浏览器开发工具来检查响应头。
编辑
可能是这个错误导致了问题:
<?php
echo substr( "file.ext", strrpos("file.ext", '.') );

返回的是“.ext”而不是“ext”。可以使用strrpos() + 1进行替换。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接