内容处置:内联标题不会内联显示图像?

发布于 2024-09-01 08:30:55 字数 1224 浏览 8 评论 0原文

我正在尝试在页面上显示内嵌图像。它由 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 当然显示得很好。

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

I'm trying to show an image inline on a page. It is being served by a codeigniter controller.

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 );
    }

}

When I load a image in Chrome of FF its pops up the download window. I know when the browser can't display the content inline it will force a download anyway, but these are PNG and GIF images which display in the browser fine otherwise. In IE it doesn't force a download but it displays the image in ASCII.

If I comment out the entire image case it FF and Chrome both display the ASCII but not the image.

I thought setting the content type would allow FF and Chrome to show the actual image, and also allow the location to be used as an src.

The javascript and css shows fine of course.

Anyone got any ideas how I can make the images show properly?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

北座城市 2024-09-08 08:30:55

尝试删除 Content-disposition 标头。默认情况下,它们无论如何都应该内联显示。

无论如何,你应该做错什么。我刚刚在 Opera 和 IE 中进行了测试,它们确实显示了与内容处置标头内联的图像。我使用:

<?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。

Try removing the Content-disposition header. By default, they should be displayed inline anyway.

Anyway, you should be doing something wrong. I've just tested in Opera and IE and they do indeed display the image inline with the content-disposition header. I used:

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

readfile('Untitled.png');

Use the dev tools of your browser to check the response header.

EDIT

Probably this bug is causing the problem:

<?php
echo substr( "file.ext", strrpos("file.ext", '.') );

gives ".ext" not "ext". Substitute for strrpos() + 1.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文