显示来自Java应用程序上下文之外的图像。

时间:2012-04-14 18:20:55

标签: java image

这是一个关于在Windows 7平台上使用本地java服务器测试文件上传功能的问题。由于这个问题是随着Marko的输入而发展的,所以我对其进行了编辑,以便那些遇到同样挑战的人不会在进化细节上浪费时间并尽快得出结论。

挑战在于将上传的文件定向到WAR结构之外的文件夹,并从那里成功读取。例如:将图片上传到c:/tmp/,然后重定向到显示图片<img src="c:/tmp/test.jpg" />的确认页面。上传工作但图像不会显示。基于Marko的输入,这是有道理的,因为位于localhost的浏览器将拒绝使用c:从本地磁盘结构加载任何内容。也许这些是与文件输入控件类似的安全注意事项,我们无法设置默认路径...

以下标记可以在本地创建的.html文件中使用,但是当粘贴到jsp中时,它不会起作用。不同之处在于浏览器使用localhost来访问jsp。

<img src="c:/tmp/test.jpg" />

解决方案

我认为Marko的答案几乎定义了需要做什么。虽然我没有采用这种方法,但显然这是更好的方法,我会接受它作为答案。谢谢,Marko!

对于那些不想打扰安装Web服务器并愿意忍受一点黑客攻击的人来说,这就是我所做的。同样,我不想将文件上传到我的WAR结构中,因为我需要记住在部署到服务器之前清除该文件夹。但是上传文件夹仍然需要访问,因此我只是创建了另一个虚拟项目并将该上传文件夹放在其WebContent下。这适用于我本地测试的目的。唯一令人讨厌的是,在上传文件后,我需要在Eclipse中刷新虚拟项目的WebContent。

config.properties

#for uploading files
fileUploadDirectory=C:/javawork/modelsite/tmp/WebContent

#for building html links
publicFileServicePrefix=http://localhost:8080/tmp

<img src="http://localhost:8080/tmp/test.jpg" />  // this works - tmp is the name of my dummy project.

1 个答案:

答案 0 :(得分:1)

如果你直接引用浏览器的HTML(你通过“vieew source”访问的那个),那么这与Java无关。浏览器是解释这些链接的人。如果加载失败,则问题出在浏览器/文件系统中。

<强>更新

根据您的其他诊断结果,我得出结论,浏览器(明智地!)拒绝从本地磁盘加载任何东西,如果它来自来自互联网URL的HTML文件,即使该URL是{{ 1}}。

更新2

(删除,无关)

更新3

但是你处理上传到服务器的文件,它肯定不会像你的解决方案 - 文件在服务器的本地文件系统上,而不是客户端。这种事情可以在Apache HTTP服务器级别处理 - 为静态内容保留URL部分,并使用从中提供静态内容的基本目录配置Apache。即使您在本地运行服务器,在您测试它的同一台机器上,您仍然需要通过网络接口。