用PHP脚本提供的图像加载Java ImageIcon

用PHP脚本提供的图像加载Java ImageIcon,java,php,url,Java,Php,Url,我需要从远程服务器上的图像创建一个ImageIcon。当我用一个像http://www.server.com/1.png它工作得很好 但最近服务器发生了更改,因此图像存储在web根目录之外,必须使用http://www.server.com/get_image.php?id=1,其中get_image.php输出正确的标题以提供图像。当我使用该类型的URL创建ImageIcon时,它无法加载而不会引发任何异常,getImageLoadStatus()返回MediaTracker.ERRORED。

我需要从远程服务器上的图像创建一个ImageIcon。当我用一个像
http://www.server.com/1.png
它工作得很好

但最近服务器发生了更改,因此图像存储在web根目录之外,必须使用
http://www.server.com/get_image.php?id=1
,其中get_image.php输出正确的标题以提供图像。当我使用该类型的URL创建ImageIcon时,它无法加载而不会引发任何异常,getImageLoadStatus()返回MediaTracker.ERRORED。图像服务脚本在浏览器中运行良好

有什么办法可以让这一切顺利进行吗

谢谢

编辑:下面是Java代码

ImageIcon labelIcon=新的ImageIcon(新的URL(图像URL))
System.out.println(labelIcon.getImageLoadStatus())

我也尝试了下面的方法,但也不起作用

ImageIcon labelIcon=新的ImageIcon()
buffereImage image=ImageIO.read(新URL(图像URL))
labelIcon.setImage(图像)

编辑:下面是来自get_image.php的代码$DB是global.php中包含的一个对象,用于与MySQL数据库交互。我已经验证了返回的MIME类型是image/png

<?php
    if (isset($_GET['uid']))
    {
        require_once('./include/global.php');       
        getUpload(intval($_GET['uid']));
    }

    function getUpload($id)
    {
        global $DB;

        $query = "SELECT `name`, `mime_type` FROM `uploads` WHERE `id` = " . $id . " LIMIT 1";
        $arrUpload = $DB->getSingleRecord($query);

        if (count($arrUpload) > 0)
        {
            $file = UPLOADS_ROOT . $arrUpload['name'];
            header("Content-type: " . $arrUpload['mime_type']);
            header("Content-Disposition: filename=" . $arrUpload['name']);
            readfile($file);
        }
        else
        {
            header("HTTP/1.1 404 Not Found");
        }
        die();
    }
?>


服务器可能返回了错误的内容类型:确保在响应中将内容类型标题正确设置为
image/png

导致
ImageIcon(URL)
失败的原因之一是响应未返回状态200。确保URL没有返回重定向(状态301/302)左右。还要确保请求参数名称正确。您在URL中使用了
id
,但PHP脚本需要
uid

为了检查Java代码实际得到的响应头,请尝试以下方法:

URL url = new URL("http://www.server.com/get_image.php?id=1");
URLConnection connection = url.openConnection();
for (Entry<String, List<String>> header : connection.getHeaderFields().entrySet()) {
    System.out.println(header.getKey() + "=" + header.getValue());            
}
URL=新URL(“http://www.server.com/get_image.php?id=1");
URLConnection=url.openConnection();
for(条目标题:connection.getHeaderFields().entrySet()){
System.out.println(header.getKey()+“=”+header.getValue());
}

粘贴一个示例代码段?您是否可以控制
get_image.php
的源代码?运行Fiddler并比较静态图像和php脚本的响应。是的,我可以控制get_image.phpPost的相关代码段。很可能是错的。这应该变成一个PHP问题。不要忘记按照SLaks的建议来比较标题。如果您遇到问题,也可以在此处发布。id/uid不匹配只是发布错误。您提供的代码指示null=[HTTP/1.1 200 OK]。我将尝试在PHP中将其显式设置为200。明白了!将PHP中的头函数更改为显式返回您建议的200代码,修复了该问题。谢谢