&引用;不允许加载本地资源:file:///C:....jpg" javaee-Tomcat

&引用;不允许加载本地资源:file:///C:....jpg" javaee-Tomcat,java,tomcat,storage,Java,Tomcat,Storage,我试图在存储良好后从文件系统中检索图片(而不是将其放入数据库,而是将其复制到光盘,并将路径放入数据库) 我已将图片存储到c:\images\文件夹,并假设完整路径的名称为c:\images\mypic.jpg 当我试图检索它时,使用一些java代码将img src属性设置为 在浏览器控制台中,我发现此错误不允许加载本地资源:file:///C://images//mypic.jpg 问题:如何解决这些路径问题?我应该把照片存放在哪里?我应该从哪里取回它们呢?您有两种选择: 第一种方法是创建一个S

我试图在存储良好后从文件系统中检索图片(而不是将其放入数据库,而是将其复制到光盘,并将路径放入数据库)

  • 我已将图片存储到c:\images\文件夹,并假设完整路径的名称为c:\images\mypic.jpg
  • 当我试图检索它时,使用一些java代码将img src属性设置为
  • 在浏览器控制台中,我发现此错误
    不允许加载本地资源:file:///C://images//mypic.jpg

  • 问题:如何解决这些路径问题?我应该把照片存放在哪里?我应该从哪里取回它们呢?

    您有两种选择:

    第一种方法是创建一个ServletImageLoader,它将图像的标识符(图像的路径或散列)作为参数,您将在Servlet内部使用该标识符来处理图像,它将从服务器向响应流打印加载的图像


    第二种方法是在应用程序的根文件夹中创建一个文件夹,只保存图像的相对路径

    http位置和磁盘位置的概念是不同的。您需要做的是:

  • 对于上传的文件
    summer.jpg
  • 将其移动到已知(应用程序)位置下的磁盘,例如
    c:\images\summer.jpg
  • 用文本
    summer.jpg插入表示图像的db记录
  • 要显示它,请使用普通的
  • 您需要在应用程序的
    /images
    下提供
    c:\images\
    服务的东西(例如apache)。如果无法执行此操作,则在步骤2中,您需要将其保存在web根目录下的某个位置,例如
    c:\my applications\demo app\build\images

  • 许多浏览器已经改变了安全策略,不再允许直接从文件共享甚至本地资源读取数据。您需要将文件放在tomcat实例可以提供服务的地方,并在生成的html中放置一个“常规”http url。这可以通过提供一个servlet来实现,该servlet读取并提供文件,将文件放入一个目录中,tomcat将在该目录中将其作为“静态”内容提供。

    发送标记
    将导致用户浏览器从其文件系统访问图像。 如果您必须将图像存储在位于
    c:\images
    的文件夹中,我建议创建一个类似于images.jsp的servlet,它作为一个参数获取文件名,然后将servlet响应内容设置为image/jpg,然后从服务器位置加载图像字节并将其放入响应

    但是您使用什么来创建应用程序呢?它是纯servlet吗?春天JSF


    您可以找到一些关于如何执行此操作的信息。

    在Chrome中,您应该能够通过运行时标志(允许从文件访问文件)来允许此功能

    然而,当前版本的Chrome(37,38)似乎存在一个问题,除非您同时传递运行时标志——禁用web安全性,否则无法正常工作

    这是一个不可接受的解决方案,也许只是作为一个短期的解决办法,但它已被确定为一个问题:

    此错误意味着您无法直接从文件系统加载数据,因为这背后存在安全问题。我知道的唯一解决方案是创建一个web服务来服务加载文件

    不要使用绝对路径来引用图像的名称,例如:
    C:/xamp/www/Archivos/images/templatemo\u image\u 02\u opt\u 20160401-1244.jpg
    。必须使用对其在Web服务器中位置的引用。例如,使用
    。/../Archivos/images/templatemo_image_02_opt_20160401-1244.jpg
    ,具体取决于进程的运行位置

    如果您只想在本地运行此应用程序,而不考虑安全性,这里有一个简单的
    expressjs
    解决方案:

    server.js
    app.js
    文件中,添加以下内容:

    app.use('/local-files', express.static('/'));
    
    它将服务于
    /local files
    下的整个根目录。不用说,如果您计划在本地计算机以外的任何地方部署此应用程序,这将是一个非常糟糕的主意

    现在,您可以简单地执行以下操作:

    <img src="/local-files/images/mypic.jps"/> 
    
    
    

    注意:我正在运行macOS。如果您使用的是Windows,则可能必须搜索并从路径字符串中删除“C:\”

    对此无能为力。我还没用呢。但是环顾四周,我相信你会找到一个关于通过zk框架发送图像内容的教程。另外,您应该能够在应用程序中编写具有该功能的纯servlet方法。我认为第二种方法很好,请您澄清一下如何使用-我的意思是在哪里找到我的应用程序的根-把图片放在那里的路径是什么-那么检索的路径是什么呢?你可以用apache with
    Alias
    或者你可以用tomcat(或者你使用的任何容器)with
    ServletImageLoader
    来进行检索,正如Mifmif所说。你能澄清一下Alias方法吗,因为我使用的是zk框架,首先,我无法使用servletImageLoader,我认为Google:
    apache alias
    。我使用的是apache服务器,但它仍然无法工作。不仅在chrome中,其他浏览器(如Mozilla和Edge for MS)都不提供图像服务。我正在处理一个WordPress项目,我得到了相同的“不允许加载图像”错误。两个标志
    --允许从文件访问文件
    --禁用web安全性
    不再起作用。