JSP中的图像上传和显示

时间:2011-12-18 15:34:46

标签: image jsp servlets

我已经成功学习并实现了如何使用来自Here的servlet在服务器磁盘上上传图像,现在尝试借助以下代码在另一个jsp userProfile.jsp上显示图像:

<img src="<jsp:include page='WEB-INF/jspf/profileImage.jspf' />" height="175" width="175" /> 

profileImage.jspf的代码如下:

OutputStream o = response.getOutputStream();
InputStream is = new FileInputStream(new File("../files/backPetals.jpg"));
byte[] buf = new byte[32 * 1024]; 
int nRead = 0;
while( (nRead=is.read(buf)) != -1 ) {
    o.write(buf, 0, nRead);
}
o.flush();
o.close();
return; 

但它不起作用.. 有什么其他方法可以在jsp上显示磁盘上的图像以及页面上的其他内容吗? 我已将我的图像保存在应用程序根文件夹的/files目录中。

2 个答案:

答案 0 :(得分:3)

这种方法有几个严重的错误:

  1. 您不应将上传的文件存储在应用程序根文件夹中。重新部署WAR时,它们都会丢失(仅仅因为这些文件不包含在原始WAR文件中。

  2. <img src>不应包含原始图片内容,但应包含返回文件内容的网址。 E.g。

    <img src="profilePictures/${user.profilePictureFilename}" />
    
  3. 您不应该使用JSP将二进制数据写入响应。请改用servlet。或者,如果可以,只需将上传文件的路径添加为另一个webapp上下文。

  4. 以下几个答案可以帮助您朝着正确的方向前进:

答案 1 :(得分:1)

img代码的语法为<img src="url_of_the_image" .../>。你正在做的是<img src="contents_of_the_image_file" .../>

您需要生成一个servlet的URL,这个servlet需要打开图像文件并将其内容发送到输出流。您无法在单个HTTP请求中下载HTML文件和图像。