前提:拷入两个包:
一、Jsp页面设置:
制作表单:
<form action="${pageContext.request.contextPath}/AddProdServlet"method="post"enctype="multipart/form-data">
<table border="1">
<tr>
<td>商品图片</td>
<td><inputtype="file"name="file1"/></td>
</tr>
<tr>
<tdcolspan="2"><inputtype="submit"value="添加商品"/></td>
</tr>
</table>
</form>
二.Servlet操作:
//创建map对象放置文件上传名和值
Map<String, String> map =new HashMap<String,String>();
//创建DiskFileItemFactory对象,设置缓冲区大小和文件目录
DiskFileItemFactory factory =newDiskFileItemFactory()
factory.setSizeThreshold(1024*100);
factory.setRepository(new File(this.getServletContext()
.getRealPath("/WEB-INF/tmp")));
// 使用DiskFileItemFactory对象创建ServletFileUpload对象,并设置上传文件的大小限制。
ServletFileUpload fileUpload =new ServletFileUpload(factory);
//检查是否是正确的文件上传表单(使用isMultipartContent可以判断是普通表单还是带有文件的表单)
if(!fileUpload.isMultipartContent(request))
{
thrownew RuntimeException("请用正确的表单进行上传");
}
//设置单个文件上传的大小
fileUpload.setFileSizeMax(1024 * 10204 * 5);
//设置文件上传的总大小
fileUpload.setSizeMax(1024 * 10204 * 200);
//设置编码,解决上传文件名的乱码问题
fileUpload.setHeaderEncoding("utf-8");
//文件上传解析请求
List<FileItem> list =fileUpload.parseRequest(request);
//使用增强for循环遍历文件上传的内容
for (FileItemitem : list) {
//如果当前返回的内容是普通表单的类型
if (item.isFormField()) {
//定义nameame用于返回表单标签name属性的值
Stringname =item.getFieldName();
//设置返回的value值是utf-8的格式
Stringvalue =item.getString("utf-8");
//将文件上传名和值放置到map中
map.put(name,value);
// System.out.println(name+" "+value);
}else {
//如果不是普通表单的形式
Stringname =item.getName();
//创建随机名称,这样能够方便让上传文件名唯一
StringuuidName = UUID.randomUUID().toString()+name;
// System.out.println(uuidName);
//创建文件保存的路径
Stringpath =this.getServletContext().getRealPath(
"/WEB-INF/upload");
//在系统中利用hashCode值,这样才能确保图片上传是唯一的
inthashCode =uuidName.hashCode();
//将hashCode值转换成十六进制的字符串
StringhashStr = Integer.toHexString(hashCode);
//将获得的字符串转换成数组
charhss[] =hashStr.toCharArray();
Stringimgurl="/WEB-INF/upload";
//遍历,这样可以让文件包分配资源合理
for (charc : hss) {
path +="/" + c;
imgurl +="/" + c;
}
imgurl +="/" + uuidName;
map.put("imgurl",imgurl);
new File(path).mkdirs();
System.out.println(path);
//文件的读写
InputStreamin =item.getInputStream();
OutputStreamout =new FileOutputStream(new File(path,uuidName));
IOUtils.In2Out(in,out);
IOUtils.close(in,out);
//删除临时文件
item.delete();
PicUtilspicUtils =new PicUtils(path+"/"+uuidName);
picUtils.resizeByHeight(100);
}
}
Prodprod =new Prod();
//将前台传过来的数据封装到javaBean中;
BeanUtils.populate(prod,map);
service.addProd(prod);
//3提示成功,返回首页
response.getWriter().write("添加商品成功!3秒回首页");
response.setHeader("Refresh","3;url="+request.getContextPath()+"/index.jsp");
}catch (Exceptione) {
e.printStackTrace();
}