前台上传页面
<form action="/registerServlet" class="form-horizontal" id="form" method="post" enctype="multipart/form-data">
<div class="form-group">
<div class="col-lg-12">
<label class="col-lg-3">头像</label>
<div class="col-lg-8"><input type="file" class="" placeholder="上传头像" id="userImg" name="userImg" onblur=""><span></span></div>
<span></span>
</div>
<div class="col-lg-12">
<button type="button" class="btn btn-primary btn-lg col-lg-offset-2 col-lg-7" id="submits" onclick="tj()">注册</button>
</div>
</div>
</form>
后台servlet接受,详细解释都在代码注释里
//上传头像到指定文件夹DiskFileItemFactory
DiskFileItemFactory itemFactory = new DiskFileItemFactory();
//文件上传对象
ServletFileUpload upload = new ServletFileUpload(itemFactory);
//设置相关参数
upload.setHeaderEncoding("utf-8");//防止中文乱码
upload.setFileSizeMax(1024 * 1024 * 10);//文件上传的最大限度
try {
List<FileItem> listItem = upload.parseRequest(request);
//遍历集合解析数据
for (FileItem item : listItem) {
if (item.isFormField()) {//普通字段
//form表单提交方式必须是:method="post" enctype="multipart/form-data"
//所以获取非文件的表单内容,就不能用普通方法,可以采用下面这个:
//map.put(item.getFieldName(), item.getString("utf-8"));
} else {//表示是文件
//文件上传
String filename = item.getName();//获取文件名
filename = FileUilt.getRealFileName(filename);
//防止文件名重复,加了一个UUID
filename = FileUilt.getUUIDFileName(filename);
//把文件名保存到实体类,加入数据库
user.setUserImg(filename);
//确定存储路径,可以上传到服务器,由于这里是本地项目,重启服务器会丢失,所以用固定路径
//HttpSession session = null;
//String realPath = session.getServletContext().getRealPath("/uploads/lisence");
String filepath = "F:\\resource\\images";
File imgFile = new File(filepath);
//判断该路径是否存在
if (!imgFile.exists()) {
imgFile.mkdirs();
}
//拼接上传路径
filepath = filepath + File.separator + filename;
//获取输入流
InputStream in = item.getInputStream();
//获取输出流
FileOutputStream out = new FileOutputStream(filepath);
//复制
IOUtils.copy(in, out);
out.close();
in.close();
}
} catch (Exception e) {
e.printStackTrace();
}
前台显示(我这里用的El表达式直接获取保存在session里的值)
<img class="img-circle" src="/img/${user.getUserImg()}">
访问上传的文件我们最好在服务器里配置一个虚拟路径
在conf/servlet.xml —> 找到<Host></Host>
,添加如下实例代码:
<Context docBase="F:\resource\images" path="/img"/>
doBase:实际路径
path:虚拟路径
然后再开发工具里配置Tomcat,勾选 Deploy application configured in Tomcat instance
如有错误,请指正