上传文件需要的包:
说明:
在做表单提交的时候,上传文件的表单相比于普通的表单提交的不同点在于需要在后面加上enctype="multipart/form-data",而且在srrvlet类中不能用普通的getparameter方法获取值,如果按此方法接值为空值。
servlet类中的处理方法:
1.获取文件上传到的文件夹的路径
String path=getServletContext().getRealPath("Upload");
2.创建指定文件的路径
File file=new File(path);
3.判断之前是否已经创建过此文件夹,如没有则新建
if(!file.exists()){
//可以创建
file.mkdirs();
}
4.获取硬盘工厂文件项对象
DiskFileItemFactory disk=new DiskFileItemFactory();
5.获取servlet对象(来自commons-fileupload-1.2.2.jar)
ServletFileUpload up=new ServletFileUpload(disk);
6.将普通的属性用键值对存储起来
Map<String, String> map=new HashMap<String, String>();
7.将图片对象用list集合存储起来
List<String> imgs=new ArrayList<String>();
8.获取请求参数的值
List<FileItem> fileItems=up.parseRequest(request);
for (FileItem fileItem : fileItems) {
if(fileItem.isFormField()){//表单中的普通字段
String name=fileItem.getFieldName();
String val=fileItem.getString();
val=new String(val.getBytes("iso-8859-1"),"utf-8");
map.put(name, val);
System.out.println(name+val);
}
else{//文件
String fileName=fileItem.getName();
fileItem.write(new File(path+"/"+fileName));
imgs.add(fileName);
}
}
9.将取得的值放进实体类对象上,再存入数据库中
Upload upload=new Upload();
upload.setId(null);
upload.setName(map.get("username"));
upload.setDesc(map.get("desc"));
upload.setImgs(imgs.get(0));
QueryRunner run=new QueryRunner(TestPool.getDataSource());
String sql="INSERT INTO `upload` (`id`, `name`, `desc`, `imgs`) VALUES (?,?,?,?)";
Int i=run.update(sql,upload.getId(),upload.getName(),upload.getDesc(),upload.getImgs());
取出存入数据库中的图片
在servlet中:
1.取出符合条件的实体类对象
List<Upload> list=run.query(sql, new BeanListHandler<Upload>(Upload.class));
2.将实体类对象转发到view.jsp页面
request.setAttribute("list", list);
request.getRequestDispatcher("view.jsp").forward(request, response);
3.用<c:foreach>循环将符合条件的实体类遍历出来
<c:forEach items="${list}" var="l" varStatus="index">
<tr>
<td>${l.id}</td>
<td>${l.name}</td>
<td>${l.desc}</td>
<td><img src="Upload/${l.imgs}"></td>
</tr>
</c:forEach>