在FireFox中显示图像时出现问题

时间:2010-05-04 06:59:47

标签: html internet-explorer image firefox jsp

我有一个JSP页面,我有一个div标签,其中有一个IMG标签。使用这个IMG标签我想在其中显示一个图像。这里图像的源路径来自数据库,因此我使用JSP scriplet分配了一个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 ;身高:1099“

使用此语法,图像在Internet Explorer中可见但具有相同的语法在FireFox,Google Chrome等中不可见。

请指导我的朋友。

另请告诉我如何提供存储在Internet Explorer,FireFox,Google Chrome等工作的不同机器上的图像路径。

4 个答案:

答案 0 :(得分:3)

如果要在互联网上发布此页面,请不要对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" />

您将需要实现图像处理程序,如下所示:

  • 从图像ID

  • 获取图像路径
  • 从标识路径返回到客户端浏览器的图像流

答案 1 :(得分:0)

File URIs应采用file://host/path格式,因此对于您的示例,它将是

  

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

我已经在IE,Firefox,Opera上尝试过了,它可以运行。我没有Chrome,但我认为它应该没有问题。但是,当您使用文件URI时,还有其他注意事项,例如,您无法访问其他Windows计算机上的图像,除非它位于共享文件夹中,并且远程计算机上的文件语法因浏览器而异。 (有关详细信息,请参阅wikipedia

因此,如果要在Intranet或Internet上公开提供此JSP文件,最好将图像存储在Web服务器上的外部可访问文件夹中,并使用IMG标记中的相对或绝对HTTP URI引用它们(一个或多个)。

答案 2 :(得分:0)

不要忘记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" />

答案 3 :(得分:0)

HTML src元素的<img>属性应指向URL,而不是指向本地磁盘文件系统路径。 HTML页面即从服务器机器下载到客户机并在客户机上解析。 HTML页面中出现的任何URL(例如Javascripts,Stylesheets,Images等)都将从客户端重新调用。如果客户端遇到本地磁盘文件系统路径,它将尝试在自己的本地磁盘文件系统中搜索该文件。如果服务器和客户端在物理上是不同的机器,则无法工作。

在您的特定情况下,有两种方法可以解决此问题。

  1. 将新的webapplication上下文添加到servletcontainer中,纯粹用于提供静态文件。目前还不清楚你正在使用哪个servlet容器,但它是Tomcat,那么你基本上需要做的就是将以下Context元素添加到/conf/server.xml

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

    通过这种方式,http://example.com/images/....可以访问它们。

  2. 创建一个Servlet类,使用java.io.File获取图像文件的InputStream并将其写入响应的OutputStream。您可以使用请求参数或pathinfo来标识图像。以下是这种servlet的基本示例:


  3. 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">
    

    可以找到另一个图像servlet示例here