<body>
<form action="/UploadServlet" method="post" enctype="multipart/form-data">
用户名:<input name="uname"/>
<br/>
头像: <input type="file" name="upicture"/>
<br/>
<input type="submit" value="提交"/>
</form>
<a href="DownloadServlet?filename=1.png">文件下载</a>
</body>
@WebServlet("/UploadServlet")
public class UploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取文件上传的路径--服务器路径
String realPath = request.getServletContext().getRealPath("/image/user");
File f = new File(realPath);
if(!f.exists()) {
f.mkdirs();
}
//设置编码
request.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=UTF-8");
response.setCharacterEncoding("utf-8");
try {
//判断前台的form是否是要上传文件
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart) {
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(1024*200);//200kB
//form中的所有请求字段将保存到 items集合中 包括用户名和头像,不能再用request.getParameter方法
List<FileItem> items = upload.parseRequest(request);
//遍历集合,分别处理简单数据和文件数据
Iterator<FileItem> iter = items.iterator();
while (iter.hasNext()) {
FileItem item = iter.next();
//String itemName = item.getFieldName();
if (item.isFormField()) {//普通字段--用户名
String name = item.getString("UTF-8");
}else {//文件
String fileName = item.getName();
//判断是否为图片
String ext = fileName.substring( fileName.indexOf(".")+1 ) ;
if(!(ext.equals("png") || ext.equals("gif") ||ext.equals("jpg"))) {
System.out.println("图片类型有误!格式只能是 png gif jpg");
return ;//终止
}
//处理图片
String newFileName = UUID.randomUUID().toString() + fileName.substring(fileName.lastIndexOf("."), fileName.length());
String path=realPath+File.separator+newFileName;
File file = new File(path);
item.write(file);// 上传
System.out.println(fileName + "上传成功!");
return;
}
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}