【问题标题】:Content-disposition:inline header won't show images inline?内容处置:内联标题不会内联显示图像?
【发布时间】:2011-02-19 09:06:54
【问题描述】:

我正在尝试在页面上显示内嵌图像。它由一个 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 );
    }

}

当我在 FF 的 Chrome 中加载图像时,它会弹出下载窗口。我知道当浏览器无法内联显示内容时,无论如何它都会强制下载,但这些是 PNG 和 GIF 图像,否则它们可以在浏览器中正常显示。在 IE 中它不会强制下载,但会以 ASCII 格式显示图像。

如果我注释掉整个图像大小写,FF 和 Chrome 都显示 ASCII 但不显示图像。

我认为设置内容类型将允许 FF 和 Chrome 显示实际图像,并且还允许将位置用作 src。

javascript 和 css 显示正常。

有人知道如何使图像正确显示吗?

【问题讨论】:

    标签: php image codeigniter http-headers content-disposition


    【解决方案1】:

    尝试删除 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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-09
      • 1970-01-01
      • 1970-01-01
      • 2017-02-14
      • 2019-05-14
      • 1970-01-01
      相关资源
      最近更新 更多