嗯,我正在Tomcat下做一个Eclipse动态Web项目。 我正在尝试制作一个网络应用程序/站点。在 jsp/html 页面中,有一个表单,用户可以在其中上传照片。 然后,我从一个 servlet 处理此操作,该 servlet 必须将此图像/文件存储在某个地方,以便图像可以在我想要的网站上随时出现。
这就是问题所在。我首先将其存储在我的文件系统(数据库中的路径)上,但是当我想检索它时,页面没有出现。 我想原因在这里:
为什么我不能做?
然后,我尝试将文件存储在 eclipse 项目文件夹(WebContent/文件夹)中,在那里我手动存储了一些确实出现的图像。
File folder=new File("/TED/res/img");
File file=new File(folder,fileName);
System.out.println(file.toPath());
Files.copy(fileContent, file.toPath());
但会发生以下异常:
java.nio.file.NoSuchFileException:/TED/res/img/2017-08-13-123524.jpg
这是一行 files.copy 命令,这意味着
我尝试失败的新文件(文件夹,文件名)
我该怎么办?从我所读到的内容中,我了解到将文件保存在 IDE 的项目文件夹中也是错误的,但我还有什么其他选择?
最终,项目将部署到服务器。因此,有三个不同的问题:
- 上传的用户内容位置:图像等内容应上传到 Web 应用(项目)外部的文件夹。 Web 应用程序(项目)内的图像应该是应用程序所需的图像,由开发人员提供,而不是用户生成的图像。
- 在 Eclipse 中,在开发和测试期间,您将希望通过 Tomcat 提供这些映像。有很多方法可以做到这一点。 Tomcat 配置可能不是最好的 - 请阅读这里的答案和讨论:在 Java Web 应用程序中从应用程序服务器外部提供静态数据的最简单方法
- 一旦应用程序部署到服务器,Tomcat很可能会在像Apache或Nginx这样的Web服务器后面运行。 在这种情况下,外部图像文件夹及其包含的文件可以直接由 Web 服务器提供。 即使您在 (2) 中实现了 servlet 用于使用 Eclipse 进行本地测试,并且此 servlet 是已部署代码的一部分,也不会调用它,因为 URL 在到达 Tomcat 之前会被 Web 服务器截获。 例如,如果上载的图像文件夹
C:images
开发环境中,则 servlet 可以使用 (2) 中的技术作为/images/*
提供该文件夹。 当部署到服务器时,可以将 Web 服务器配置为从/srv/content/images
提供/images/*
,并且此请求永远不会到达 Tomcat。