[英]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.