<!--
上传文件:表单要求
1,enctype="multipart/form-data"
2.表单中需要有type="file"的input
3.表单的请求方式一定是POST。即method="post"
servlet要求
1.不能使用request.getParameter
2.使用request.getInputStream
-->
<form action="/file_upload/RegistServlet" method="post" enctype="multipart/form-data">
用户:<input name="username" type="text"><br>
注册:<input name="password" type="password"><br>
照片:<input name="pic" type="file" ><br>
<input type="submit" value="提交">
</form>
//获得复杂类型表单的输入流
InputStream in = request.getInputStream();
//获得输入流的内容
String result = IOUtils.toString(in);
fileUpload的简单应用
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//创建接受文件的工厂类
DiskFileItemFactory factory = new DiskFileItemFactory();
//创建文件解析对象
ServletFileUpload sfu = new ServletFileUpload(factory);
try {
//解析request,获得表单中的每一文件(包含普通文本域)项
List<FileItem> list = sfu.parseRequest(request);
//遍历每一个文本项
for(FileItem fi : list){
//获得原始文件名
String origFileName = fi.getName();
//获得文本域项的内容
String content = fi.getString();
//获得文本域的名字
String fieldName = fi.getFieldName();
//文本域的内容的类型
String ContentType = fi.getContentType();
//获得文件的大小(以字节为单位)
long size = fi.getSize();
//是否是普通文本(普通文本就是非长传文件形式的文本)true代表普通字段,false是文件字段
boolean isFieldForm = fi.isFormField();
System.out.println("原始文件名:"+origFileName);
System.out.println("文本项的内容:"+content);
System.out.println("文本域的名字:"+fieldName);
System.out.println("文本域的内容类型:"+ContentType);
System.out.println("文件大小:"+size);
System.out.println("是否是普通字段:"+isFieldForm);
System.out.println("-----------------------------------");
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
简单的文件写入硬盘
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*//设置request请求的编码方式。解决上传文件名中含有中文,出现中文乱码的问题.方法1
request.setCharacterEncoding("UTF-8");*/
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
//创建接受文件的工厂类
DiskFileItemFactory factory = new DiskFileItemFactory();
//创建文件解析对象
ServletFileUpload sfu = new ServletFileUpload(factory);
//解析request请求的编码方式。解决上传文件名中含有中文,出现中文乱码的问题.方法2
sfu.setHeaderEncoding("UTF-8");
try {
//解析request,获得表单中的每一文件(包含普通文本域)项
List<FileItem> list = sfu.parseRequest(request);
//遍历每一个文本项
for(FileItem fi : list){
//获得原始文件名
String origFileName = fi.getName();
//获得文本域的名字
String fieldName = fi.getFieldName();
//是否是普通文本(普通文本就是非长传文件形式的文本)true代表普通字段,false是文件字段
boolean isFieldForm = fi.isFormField();
if(!isFieldForm){
if(fieldName != null && !"".equals(fieldName)){
//首先指定要上传的目录(就是把jsp页面上传的file文件,保存到哪个目录下),隐私文件可以放在web-inf下,提高安全性
String upLoadPath = request.getSession().getServletContext().getRealPath("/WEB-INF/upload");
//生成UUID文件名,使文件名不会重复
String uuid = UUID.randomUUID().toString();
//获得原始文件的后缀名
String suffix = origFileName.substring(origFileName.lastIndexOf("."));
//创建文件对象
File file = new File(upLoadPath,uuid+suffix);
//把文件写入硬盘
fi.write(file);
//回写结果
response.getWriter().print("文件上传成功");
}
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
转载于:https://www.cnblogs.com/Mr-Dxin/p/10034435.html