我已经成功学习并实现了如何使用来自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
目录中。
答案 0 :(得分:3)
这种方法有几个严重的错误:
您不应将上传的文件存储在应用程序根文件夹中。重新部署WAR时,它们都会丢失(仅仅因为这些文件不包含在原始WAR文件中。
<img src>
不应包含原始图片内容,但应包含返回文件内容的网址。 E.g。
<img src="profilePictures/${user.profilePictureFilename}" />
您不应该使用JSP将二进制数据写入响应。请改用servlet。或者,如果可以,只需将上传文件的路径添加为另一个webapp上下文。
以下几个答案可以帮助您朝着正确的方向前进:
答案 1 :(得分:1)
img
代码的语法为<img src="url_of_the_image" .../>
。你正在做的是<img src="contents_of_the_image_file" .../>
。
您需要生成一个servlet的URL,这个servlet需要打开图像文件并将其内容发送到输出流。您无法在单个HTTP请求中下载HTML文件和图像。