"不允许加载本地资源:file:/// C:.... jpg" Java EE Tomcat

时间:2014-05-31 12:15:25

标签: java tomcat storage

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

  1. 我已将图片存储到c:\ images \文件夹,并假设完整路径的名称为c:\ images \ mypic.jpg
  2. 当我尝试检索它时,使用一些java代码将img src属性设置为<img src="c:\images\mypic.jps">
  3. 在浏览器控制台中发现此错误Not allowed to load local resource: file:///C://images//mypic.jpg
  4. 问题:如何修复这些路径问题?我应该在哪里存储图片?我应该从哪里取回它们?

8 个答案:

答案 0 :(得分:20)

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

但您使用什么来创建应用程序?它是纯servlet吗?弹簧? JSF?

Here你可以找到一些关于如何做的信息。

答案 1 :(得分:11)

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

然而,看起来当前版本的Chrome(37,38)存在问题,除非您还传递运行时标志--disable-web-security

,否则这不起作用

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

答案 2 :(得分:3)

您有两种选择:

首先要创建一个ServletImageLoader,它将把你在Servlet中用来处理图像的图像标识符(图像的路径或哈希)作为参数,它将打印到响应中从服务器流式传输加载的图像。

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

答案 3 :(得分:3)

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

答案 4 :(得分:1)

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

  1. 用于上传的文件summer.jpg
  2. 将已知(到应用程序)位置下的内容移动到磁盘,例如c:\images\summer.jpg
  3. 插入到表示带有文本summer.jpg
  4. 的图像的db记录中
  5. 显示它使用普通<img src="images/summer.jpg" />
  6. 您需要在您的应用程序c:\images\下提供/images的内容(例如apache)。如果你不能这样做,那么在第2步中你需要保存在你的网络根目录下的某个地方,例如c:\my-applications\demo-app\build\images

答案 5 :(得分:1)

此错误表示您无法直接从文件系统加载数据,因为此后存在安全问题。我所知道的唯一解决方案是创建一个Web服务来提供加载文件。

答案 6 :(得分:1)

如果您只想在本地运行此应用并且安全性不是问题,那么这是一个简单的expressjs解决方案:

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

app.use('/local-files', express.static('/'));

这将在/local-files下提供您的整个根目录。毋庸置疑,如果您计划在本地计算机以外的任何地方部署此应用程序,这是一个非常糟糕的主意。

现在,您可以这样做:

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

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

答案 7 :(得分:0)

请勿使用ABSOLUTE PATH来引用图像的名称,例如:C:/xamp/www/Archivos/images/templatemo_image_02_opt_20160401-1244.jpg。您必须在Web服务器中使用对其位置的引用。例如,使用../../Archivos/images/templatemo_image_02_opt_20160401-1244.jpg取决于您的进程的运行位置。