Проблема с отображением изображения в FireFox

У меня есть страница JSP, на которой есть тег div, в котором есть тег IMG. Используя этот тег IMG, я хочу показать в нем изображение. Здесь исходный путь изображения берется из базы данных, поэтому я назначил переменную JSP с помощью скрипта JSP. Эта переменная JSP имеет исходный путь к изображению. Этот путь изображения может относиться к другому компьютеру или к одному и тому же компьютеру, то есть изображения хранятся на другом компьютере или на одном компьютере, то есть на локальном компьютере на другом диске. Проблема в том, как указать путь к изображению, хранящемуся на другом компьютере, а также на одном компьютере. Я пробовал разные способы, например, давая IP-адрес этой машины. Вот путь к локальной машине, где хранится изображение

img src = file: \ localhost \ D: \ ScannedSheets \ testproj / batch1 / IMG001.jpg style = "z-index: 1; position: absolute; top: 0; left: 0; width: 850; height: 1099 "

С этим синтаксисом изображение отображается в Internet Explorer, но с тем же синтаксисом оно не отображается в FireFox, Google Chrome и т. Д.

Пожалуйста, наведи меня в друзья.

Также скажите мне, как указать путь к изображению, хранящемуся на другом компьютере, который работает в Internet Explorer, FireFox, Google Chrome и т. Д.


person Param-Ganak    schedule 04.05.2010    source источник


Ответы (4)


Не используйте абсолютные пути для тегов img, если вы собираетесь опубликовать эту страницу в Интернете. Она не будет работать. Вместо этого используйте относительный путь. Вам необходимо сохранить изображение на том же уровне каталога, что и ваша html-страница. Например, если ваша страница хранится здесь: C: \ Web \ Page.html, поместите свое изображение сюда C: \ Web \ Images \ IMG001.jpg.

И ваш код должен выглядеть так:

<img src="Images/IMG001.jpg" style="z-index:1; position:absolute; top:0; left:0; width:850; height:1099" />

РЕДАКТИРОВАТЬ:

Для удаленного сервера с обработчиком изображений:

<img src="http://remoteserver/ImageHandler/?imageId=2323" style="z-index:1; position:absolute; top:0; left:0; width:850; height:1099" />

Вам нужно будет реализовать обработчик изображений, который будет делать следующее:

  • Получает путь к изображению из БД по идентификатору изображения

  • Возвращает поток изображения в клиентский браузер по указанному пути

person wassertim    schedule 04.05.2010
comment
@Tim Спасибо за ответ. Но на самом деле я хочу хранить эти изображения отдельно на другом компьютере, потому что эти изображения будут часто меняться, и изображения также имеют большое количество, поэтому я не хочу хранить эти изображения на сервере. Я хочу хранить эти изображения на отдельной машине, путь к которой хранится в базе данных, и мой веб-сервер отображает изображение по этому пути на моей странице, поэтому есть ли какое-либо решение по этому поводу. Спасибо! - person Param-Ganak; 04.05.2010
comment
Для получения изображений вам понадобится веб-сервер на вашей картинной машине. И вам понадобится веб-обработчик для получения путей к изображениям из db - person wassertim; 04.05.2010

URI файлов должны быть в формате file://host/path, поэтому для вашего примера это будет

img src = "file: // localhost / D: /ScannedSheets/testproj/batch1/IMG001.jpg" ...

Я пробовал его в IE, Firefox, Opera, и он работает. У меня нет Chrome, но, думаю, проблем быть не должно. Однако есть и другие соображения, когда вы используете URI файлов, например, вы не можете получить доступ к изображениям на другом компьютере с Windows, если он не находится в общей папке, а синтаксис файлов на удаленных машинах зависит от браузеров. (Подробнее см. википедию)

Следовательно, если этот файл JSP должен быть общедоступным в интрасети или Интернете, вам лучше хранить изображения в папке с внешним доступом на веб-сервере и ссылаться на них, используя относительные или абсолютные HTTP-URI в ваших тегах IMG. .

person anonymous    schedule 04.05.2010

Атрибут src элемента HTML <img> должен указывать на URL, а не на путь к файловой системе на локальном диске. HTML-страница загружается с серверной машины на клиентскую и анализируется на клиентской машине. Любые URL-адреса, которые встречаются на HTML-странице (например, Javascripts, таблицы стилей, изображения и т. Д.), Будут повторно вызываться на стороне клиента. Если клиент обнаруживает путь к файловой системе на локальном диске, он попытается найти файл в своей собственной файловой системе на локальном диске. Это не сработает, если сервер и клиент физически разные машины.

В вашем конкретном случае есть два способа решить эту проблему.

  1. Добавьте новый контекст веб-приложения в свой сервлет-контейнер с чистой целью для обслуживания статических файлов. Неясно, какой контейнер сервлетов вы используете, но если это Tomcat, то все, что вам нужно сделать, это добавить следующий элемент Context в /conf/server.xml:

    <Context docBase="/path/to/images" path="/images" />
    

    Таким образом, они будут доступны http://example.com/images/.....

  2. Создайте класс Servlet, который использует java.io.File для получения InputStream файла изображения и записывает его в OutputStream ответа. Вы можете использовать параметры запроса или информацию о пути для идентификации изображения. Вот базовый пример такого сервлета:


protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
{
    String filename = URLDecoder.decode(request.getPathInfo(), "UTF-8");
    File file = new File("/path/to/images", filename);

    response.setContentType(getServletContext().getMimeType(file.getName()));
    response.setContentLength(file.length());
    response.setHeader("Content-Disposition", "inline; filename=\"" + file.getName() + "\"");

    BufferedInputStream input = null;
    BufferedOutputStream output = null;

    try {
        input = new BufferedInputStream(new FileInputStream(file));
        output = new BufferedOutputStream(response.getOutputStream());

        byte[] buffer = new byte[8192];
        int length;
        while ((length = input.read(buffer)) > 0) {
            output.write(buffer, 0, length);
        }
    } finally {
        if (output != null) try { output.close(); } catch (IOException ignore) {}
        if (input != null) try { input.close(); } catch (IOException ignore) {}
    }
}

Отобразите его в web.xml на url-pattern из, например, /images/*. Таким образом, вы можете получить доступ к изображениям, например, http://example.com/images/filename.jpg.

<img src="/images/filename.jpg">

Другой пример сервлета изображений можно найти здесь.

person BalusC    schedule 04.05.2010

И не забудьте тег ALT:

<img src="Images\IMG001.jpg" style="z-index:1; position:absolute; top:0; left:0; width:850; height:1099" alt="some name to this image for google" />
person Skate    schedule 04.05.2010
comment
Пожалуйста, отредактируйте свой пост, оберните html и объясните, почему это ответ. - person Rohit Gupta; 21.12.2015