关于上传图片到webContent里面的文件夹images
这篇文章也是看了诸多大神的代码所写的,主要代码还是一位大神的,至于名字我忘记了,以下是代码
- 首先先要导入俩个包commons-fileupload-1.3.1.jar和commons-io-2.4.jar这两个包,搜一下的话还是有人发下载链接的
- 其次关于这篇文章我也不是懂的很多,只能说我也是刚学会一点,也不敢称大神
- 代码最后还是能出图片的
- form表单要设置enctype="multipart/form-data"这个属性,设置这个属性后,你的servlet代码就不能通过request.getParameter(name)来获取值了,不过方向,代码中包含了解决方法。
//收集数据的容器
Map<String,Object> map = new HashMap<String, Object>();
//创建磁盘工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
//创建文件上传核心对象
ServletFileUpload upload = new ServletFileUpload(factory);
//解析request集合
List<FileItem> parseRequest = null;
try {
parseRequest = upload.parseRequest(request);
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//遍历request集合
for (FileItem fileItem : parseRequest) {
//判断是普表单项还是文件表单项
boolean formField = fileItem.isFormField();
if(formField){//是普通表单项
String fieldName = fileItem.getFieldName();//获取表单项名字,也就是平时getParameter的那个name
String stringValues = fileItem.getString("utf-8");//获取表单项的值,平时getParameter的那个name返回的值当然要编码
map.put(fieldName, stringValues);//设置到map,取出一个name你就得将这个值添加到上面定义的map中,用于后面进行封装
}else{//是文件上传的表单项
//获取上传的文件名字
String name = fileItem.getName().substring(fileItem.getName().lastIndexOf("."));
//随机一个唯一的名字给图片重新命名,以免重复
String imgName = UUID.randomUUID() + name;
//设置保存路径,也就是你根路径底下的一个文件夹中
String realPath = getServletContext().getRealPath("images/customer");
//获取输入流读取文件
InputStream inputStream = fileItem.getInputStream();
//创建输出流写入文件,路径/图片名字
OutputStream outputStream = new FileOutputStream(realPath+"/"+imgName);
//将文件写入到images中
IOUtils.copy(inputStream, outputStream);
//关流
inputStream.close();
outputStream.close();
fileItem.delete();
//根据对象保存路径~(相对路径),一般数据库中的图片字段都是相对路径.总之添加数据时根据你数据库图片字段的格式添加,这里 的路径可以自己更改
map.put("productImg", "http://localhost:8080/kankanjavaweb/images/customer/"+imgName);
}
}
- 代码就到这里就可以完成图片上传,另外强调,关于表格其他的数据,可以通过map.get(“name”)来获取,这里的name就是表单中<input … name="">这里面的值,自己起的,然后就可以调用自己封装的增删改查的方法了