【问题标题】:how to get image stored from tomcat server and display it如何从tomcat服务器获取存储的图像并显示它
【发布时间】:2013-10-21 15:34:40
【问题描述】:

我有一个用户表单,其中允许用户上传图像。我将这些图像存储在 tomcat 服务器中,并将图像名称存储在数据库中以检索特定用户的图像。

我的图片存储代码如下..

String filePath = getServlet().getServletContext().getRealPath("/") +"Images";
File folder = new File(filePath);
if(!folder.exists()){
 folder.mkdir();
 }
 String fileName = userForm.getUploadedFile().getFileName();
 System.out.println("Server path:" +filePath);
File newFile = new File(filePath, fileName);
                                              FileOutputStream fos = new FileOutputStream(newFile);
 fos.write(userForm.getUploadedFile().getFileData());
fos.flush();
fos.close();

现在我想在登录后在用户的个人资料页面中显示存储的图像..

我在个人资料页面中做了类似的事情..

<img src="http://localhost:8082/Images/${sessionUser.image}"/> 

但是我的图片没有显示出来..

请有人指导..

【问题讨论】:

  • 您确定该文件正在上传到指定文件夹吗?您可以通过“我的电脑”访问它吗?还有System.out.println("Server path:" +filepath);的输出是什么?
  • 是的,它正在上传,“服务器路径”给了我 D:\Arthi iyer\.metadata\.plugins\org.eclipse.wst.server.core\tmp3\wtpwebapps\NewStrutsOBL\Images\Koala .jpg
  • 查看您的个人资料页面源并复制​​img标签的src属性的确切值并将其直接粘贴到您的浏览器地址栏中。结果是什么?它给了你哪个 HTTP 错误?
  • 在 chrome 之类的浏览器中试一试,并检查其开发者工具的“网络”选项卡。 status 列中有什么内容?响应头是什么?
  • 您说您的页面中有localhost:8082/Images/Koala.jpg,但在回复@Ashish 时您说localhost:8082/Images/${sessionUser.image} 哪个是正确的?

标签: java


【解决方案1】:

当我们试图访问 webapp 容器之外的文件(图像、视频、pdf 等)时,我们需要创建一个从服务器到该文件夹​​的链接。这可以通过使用 Context 元素的 'docBase''path' 属性来完成。 有几种方法可以做到这一点(请参阅 this link 了解 Tomcat 文档中所述的所有方法) 我发现的最简单的方法是将以下代码放在 Host 标签下的 Tomcat 服务器的 /apache-tomcat-8.0.36/conf/server.xml 文件中。

<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
---------
---------
<Context docBase="/path/of/your/external/folder" path="/your_webapp_name/your/url"/>
---------
---------
</Host>

现在您可以在视图页面中轻松访问外部文件夹中的文件,如下所示(假设 /path/of/your/external/folder 中有一个名为 IMAGE.jpeg 的图像):

<img src="/your_webapp_name/your/url/IMAGE.jpeg" />

注意:- 请注意您是使用 eclipse 配置的 tomcat 服务器还是从终端使用 tomcat。在任何一种情况下,对适当的 server.xml 文件进行更改,即,如果您使用 eclipse 配置的 tomcat 服务器,则对 eclipse 的 Servers 目录中的 server.xml 文件进行更改,而不是在安装它的主目录中。

【讨论】:

  • 本例没有外部路径,上传到部署应用下的文件夹。
【解决方案2】:

您的 Web 应用程序在上下文 /NewStrutsOBL‌ 下运行,并且您放置的链接用于根上下文 /。

你应该

把链接改成use context path:

&lt;img src="${pageContext.request.contextPath}/Images/${sessionUser.image}"/&gt;

或将上下文放在链接中(不是一个好方法,但工作)

&lt;img src="http://localhost:8082/NewStrutsOBL‌/Images/${sessionUser.image}"/&gt;

或者在链接中使用相对路径,比如你的页面文件是否与图片在同一目录下(根据需要可能好或不好):

&lt;img src="Images/${sessionUser.image}"/&gt;

作为旁注,您也可以将 change your context path 从 /NewStrutsOBL‌ 转换为 /(当您从 Eclipse 运行时,simpler way),但这与问题无关,通常依赖它是一种不好的做法链接或代码中的特定上下文根。

作为另一个不相关的旁注,在大型企业应用程序中,您通常不会修改正在运行的应用程序的 Web 应用程序内容,而是使用外部文件夹或数据库。但对于个人或测试应用程序来说没问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    相关资源
    最近更新 更多