使用文件上传的流程(最原始的操作,也是后面的方法的内部实现):
简化过后的步骤:
list.jsp 代码部分:
enctype="multipart/form-data",必须要有!!!!!
<form action="<c:url value='/FileTwoServlet' />" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="username"><br>
头像: <input type="file" name="headPicture"><br>
<input type="submit" value="提交">
</form>
servlet代码:
这里要注意的是request.getparamters()方法就不可以再用了,
可以使用request.getinputStream();将整个表单用流的形式来保存(也就是下面代码中,为什么要将request传入的原因)
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//创建工厂
DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
//使用工厂创建解析器
ServletFileUpload fileUpload = new ServletFileUpload(fileItemFactory);
//得到fileIteam(s)
try {
List<FileItem> list = fileUpload.parseRequest(request);
FileItem ft1 = list.get(0);
FileItem ft2 = list.get(1);
//isFormFiled判断是否为普通属性,即没有文件
if(ft1.isFormField()) {
System.out.println("普通表单演示----------");
//这里就会把输入的值使用编码(utf-8)来输出
System.out.println(ft1.getString("utf-8"));//张三
//这个方法并不是输出用户输入的值(上面的那个才是)
System.out.println(ft1.getName());//null
System.out.println(ft1.getFieldName());//username
}
System.out.println("文件表单演示------------------");
//这里就会把图片变成一些字符串来输出
System.out.println(ft2.getString("utf-8"));
//输出上传照片的格式
System.out.println("ContentType"+ft2.getContentType());//image/jpeg
//照片的大小
System.out.println("size"+ft2.getSize());//164516
//将图片输出保存到f:/1.jpg
File file = new File("F:/1.jpg");
ft2.write(file);
} catch (Exception e) {
e.printStackTrace();
}
}
好了这就是简单的文件上传步骤,commons-fileUpload和io组件中的相关方法,大家可以自己去commons组件中找找api查看!
其它细节问题:文件上传I(二)