簡體   English   中英

使用PHP腳本提供的圖像加載Java ImageIcon

[英]Loading Java ImageIcon with Image Served by PHP Script

我需要從遠程服務器上的圖像創建ImageIcon。 當我使用諸如http://www.server.com/1.png的URL加載它時,它工作正常。

但是最近服務器已更改,因此圖像存儲在Web根目錄之外,並且必須使用http://www.server.com/get_image.php?id=1類的文件進行http://www.server.com/get_image.php?id=1 ,其中get_image.php將正確的標頭輸出到提供圖像。 當我使用該類型的URL創建ImageIcon時,它將無法加載而不會引發任何異常,並且getImageLoadStatus()返回MediaTracker.ERRORED。 圖像投放腳本可以通過瀏覽器正常運行。

關於如何進行這項工作的任何想法?

謝謝。

編輯:這是Java代碼。

ImageIcon labelIcon = new ImageIcon(new URL(IMAGE_URL));
System.out.println(labelIcon.getImageLoadStatus());

我也嘗試了以下方法,但是它也不起作用。

ImageIcon labelIcon = new ImageIcon();
BufferedImage image = ImageIO.read(new URL(IMAGE_URL));
labelIcon.setImage(image);

編輯:這是來自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();
    }
?>

服務器可能返回了錯誤的內容類型:請確保在響應中將其正確地將content-type標頭設置為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());            
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM