这个问题是我上一个问题Accessing External Files Into Our Web Application的延续,实际上我正在使用Struts标记<html:file property="file" />
上传文件
但现在我想显示从该位置上传的图像,但我得到的src
位置为http://localhost:9443/D:/resources/images/img1.jpg
,这不是该图像的有效路径。
如何访问我服务器目录外的镜像。
这就是我如何发送Ajax响应与绝对路径的图像
public ActionForward getAjaxUploadedFiles(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception
{
String imagePath = "D:/resources/images/";
ArrayList<String> path = new ArrayList<String>();
File imageFile = new File(imagePath);
File imageFiles[] = imageFile.listFiles();
for (int i = 0; i < imageFiles.length; i++) {
path.add(imageFiles[i].getAbsolutePath());
}
PrintWriter out = response.getWriter();
response.setContentType("text/xml");
response.setHeader("Cache-Control", "no-cache");
response.setStatus(HttpServletResponse.SC_OK);
StringBuffer strXMl = new StringBuffer();
strXMl.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
strXMl.append("<start>");
for (String imagePth : path) {
strXMl.append("<imagePath>");
strXMl.append(imagePth);
strXMl.append("</imagePath>");
}
strXMl.append("</start>");
if(strXMl != null){
String Xml = strXMl.toString();
out.write(Xml);
System.err.println("XMl Reponse is: " + Xml);
}
else {
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
}
out.flush();
return mapping.findForward(null);
}
这就是我在JSP中呈现图像的方式
$(response).find("imagePath").each(function() {
row = tblReportList.insertRow(0);
row.className="TableBordergray";
row.style.width="100%";
var imagePath = $(this).text();
cell = row.insertCell(0);
cell.innerHTML="<img src='" + imagePath + "' alt='" + imagePath + "' height='42' width='42'>";
});
但在<img>
标记处,我得到的图像路径为http://localhost:9443/D:/resources/images/img1.jpg
2条答案
按热度按时间mfuanj7w1#
嗨下面是我的问题的答案,我已经创建了
ImageServlet
显示图像,步骤执行:1.需要在web.xml文件中添加Map:
2.创建
ImageServlet
:3.在jsp端,你需要在你的
img
标签中添加第一步中的Map,即:输入类型='image':您甚至可以创建
Action
类并使用execute
方法来执行相同的操作。aij0ehis2#
你不能用这种方式渲染图像。Web服务器将您的图像路径视为相对路径,并在服务器上添加合格的URL位置。例如,您应该创建一个操作来提供图像
然后呈现HTML,如
现在,创建将二进制图像数据写入响应输出流的操作。在action中输入一个参数
path
,让您找到一个用于二进制输出的文件。在冲洗输出返回null
之后,struts不应进一步转发操作。您还可以添加头来关闭Cache-Control
,以确保从服务器检索图像。