0

好吧,我正在 Tomcat 下开发一个 Eclipse 动态 Web 项目。我正在尝试制作一个 web 应用程序/站点。在 jsp/html 页面中,有一个用户可以上传照片的表单。然后我从一个 servlet 处理此操作,该 servlet 必须将此图像/文件存储在某处,以便使该图像可以在我想要的任何时候出现在站点上。

这是问题所在。我首先将它存储在我的文件系统中(数据库中的路径),但是当我想检索它时,页面没有出现。我想原因在这里:

为什么我不能做 <img src="C:/localfile.jpg">?

然后,我尝试将文件存储在 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 的项目文件夹中保存文件也是错误的,但我还有什么其他选择?

4

1 回答 1

0

最终,项目将部署到服务器。因此,存在三个不同的问题:

  1. 上传的用户内容位置:应将图像等内容上传到您的网络应用程序(项目)之外的文件夹。Web 应用程序(项目)中的图像应该是应用程序所必需的并且由开发人员提供的图像,而不是用户生成的图像。
  2. 在 Eclipse 中,在开发和测试期间,您将希望通过 Tomcat 提供这些图像。有很多方法可以做到这一点。Tomcat 配置可能不是最好的 - 请在此处阅读答案和讨论:在 Java Web 应用程序中从应用程序服务器外部提供静态数据的最简单方法
  3. 一旦应用程序部署到服务器上,Tomcat 很可能会在 Apache 或 Nginx 等 Web 服务器后面运行。在这种情况下,外部图像文件夹及其包含的文件可以直接由 Web 服务器提供服务。即使您在 (2) 中为使用 Eclipse 进行本地测试实现了一个 servlet,并且该 servlet 是部署代码的一部分,它也不会被调用,因为 URL 在到达 Tomcat 之前会被 Web 服务器截获。例如,如果您上传的图像文件夹C:\images在您的开发环境中,它可以由 servlet 使用 (2) 中的技术作为/images/*. 当部署到服务器时,可以将 Web 服务器配置为/images/*从服务器发送,/srv/content/images并且此请求永远不会到达 Tomcat。
于 2017-08-27T20:11:11.687 回答