0

这是一个关于在 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 的回答几乎定义了需要做什么。虽然我没有采用这种方法,但这显然是更好的方法,我会接受它作为答案。谢谢,马尔科!

对于那些不想费心安装 Web 服务器并愿意忍受一些 hack 的人,这就是我所做的。同样,我不想将文件上传到我的 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.
4

1 回答 1

1

如果您从字面上引用进入浏览器的 HTML(您通过“查看源代码”访问的 HTML),那么这与 Java 无关。浏览器是解释这些链接的人。如果它们无法加载,则问题出在浏览器/文件系统中。

更新

根据您的附加诊断结果,我得出结论,如果从来自 Internet URL 的 HTML 文件引用浏览器(明智地!)拒绝从本地磁盘加载任何内容,即使该 URL 是localhost.

更新 2

(已删除,无关)

更新 3

无论您如何处理上传到服务器的文件,它绝对不会像您的解决方案那样——该文件位于服务器的本地文件系统上,而不是客户端的文件系统上。这类事情可以在 Apache HTTP 服务器级别处理——为静态内容保留一个 URL 部分,并为 Apache 配置一个用于提供静态内容的基本目录。即使您在本地运行服务器,在您测试它的同一台机器上,您仍然需要通过网络接口。

于 2012-04-14T18:36:05.577 回答