额呵呵呵....
这个是servlet 3.0之前的上传方法..............................................
一、Jsp部分
<div id="formwrapper">
<h3>添加餐品</h3>
<form action="FoodServlet?method=add" method="post" enctype="multipart/form-data">
<fieldset>
<legend>餐品信息</legend>
<div>
<label for="name">餐品名称</label>
<input type="text" name="foodName" id="foodName" value="" size="150" maxlength="200" />
<br />
</div>
<div>
<label for="descp">餐品金额</label>
<input type="text" name="foodPrice" id="foodPrice" value="" size="150" maxlength="200" />
<br />
</div>
<div>
<label for="descp">餐品描述</label>
<input type="text" name="foodDesc" id="foodDesc" value="" size="150" maxlength="200" />
<br />
</div>
<div>
<label for="descp">上传图片</label>
<input type="file" name="photo" id="photo" size="150" maxlength="200" />
<br />
</div>
<div class="enter">
<input name="submit" type="submit" class="buttom" value="提交" />
<input name="reset" type="reset" class="buttom" value="重置" />
-----------------------------------------------------------------------------------------------------------------美丽分割线
注意: form元素的 enctype属性改为 "multipart/form-data" ,用二进制流传送数据到后台,包括文件的文件域。
二、servlet接收并解析参数
public void add(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String foodName = null;
int foodPrice = 0;
String foodDesc = null;
String foodImgSrc = null;
//设置保存上传文件保存路径
String savePath = getServletContext().getRealPath("/backend/images/foodImages");
//判断路径是否存在,若不存在则创建路径
File saveDir = new File(savePath);
if(!saveDir.exists()){
saveDir.mkdir();
}
//两个上传处理的核心对象
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload sfu = new ServletFileUpload(factory);
try {
List items = sfu.parseRequest(request);
Iterator it = items.iterator();
while(it.hasNext()){
//FileItem 是个API已有接口
FileItem item = (FileItem) it.next();
//判断是否为普通的控件,若是则执行 if 里的内容
if(item.isFormField()){
if(item.getFieldName().equals("foodName")){ //判断控件名是否相等,对应元素的name
String value = item.getString();
//因为是二进制传入的参数,所以在这里还要编码重组
value = new String(value.getBytes("ISO-8859-1"),"utf-8");
foodName = value;
}
else if(item.getFieldName().equals("foodPrice")){
String value = item.getString();
System.out.println("转换前金额为:----"+value);
int a = Integer.valueOf(value);
System.out.println("转换后金额为:----"+a);
foodPrice = a;
}
else if(item.getFieldName().equals("foodDesc")){
String value = item.getString();
value = new String(value.getBytes("ISO-8859-1"),"utf-8");
foodDesc = value;
}
}
else{
//获取文件大小
Long size = item.getSize();
//获取文件名(包含了文件的类型后缀)
foodImgSrc = item.getName();
System.out.println("文件名: "+foodImgSrc);
if(foodImgSrc.endsWith(".exe")){
request.setAttribute("msg", "类型不符合要求");
}
else{
//在指定路径写出文件
File file = new File(savePath,foodImgSrc);
item.write(file);
}
}
}
} catch (FileSizeLimitExceededException e){
request.setAttribute("msg", "文件太大");
} catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e){
e.printStackTrace();
}