标签:parser 请求 servlet ret mfa 需求 img post请求 factory
====(1、)第一种、利用普通缓冲流进行文件上传
① 前端
注意:
1、指定表单类型为文件上传表单 :enctype="multipart/form-data"
2、提交方式必须为:post
3、表单中,存在文件域 的表单元素
<form name="frm_test" action="${pageContext.request.contextPath }/shangchuan" method="post" enctype="multipart/form-data">
<%--<input type="hidden" name="method" value="upload">--%>
用户名:<input type="text" name="userName"> <br/>
文件: <input type="file" name="file_img"> <br/>
<input type="submit" value="提交">
</form>
②后台
注意:
request.getQueryString();//获取get提交的数据
request.getInputStream();//获取post提交的数据,post请求以流的形式发送,(inputstream)
@RequestMapping("shangchuan")
public String shangChuan(HttpServletRequest request,HttpServletResponse respose) throws ServletException,IOException{
//获取表单(POST)数据
InputStream in=request.getInputStream();
//转换流
InputStreamReader inReader=new InputStreamReader(in);
//缓冲流
BufferedReader reader=new BufferedReader(inReader);
//遍历
String str=null;
while((str=reader.readLine())!=null){
System.out.println("-=------------------------------------------------"+str);
//解析上传的数据
}
return null;
}
====(2、)第二种、FileUpload组件(上传组件)! apache提供的开源项目!
备注:
*******************************************************
1、下载组件;引入jar文件
commons-fileupload-1.2.1
commons-io-1.4
2、配置(prop/xml)
3、FileUpload 的api学习
* ① FileFactory 文件上传工厂类(把每一个请求封装为一个个FileItem对象)
* fileItemFactory.setRepository(repository) 设置文件上传临时路径(有默认)
*
* ② ServletFileUpload 文件上传核心类
* List = upload.parseRequest(request)
* upload.isMultipartContent(request) 判断表单类型:文件上传表单
* // 一、设置单个文件允许的最大的大小: 30M
upload.setFileSizeMax(30*1024*1024);
// 二、设置文件上传表单允许的总大小: 80M
upload.setSizeMax(80*1024*1024);
// 三、 设置上传表单文件名的编码
// 相当于:request.setCharacterEncoding("UTF-8");
upload.setHeaderEncoding("UTF-8") 相当于request.setContentType(..);
③ FileItem 封装了普通表单项的值以及文件上传表单元素值
item.getFileName() 获取上传表单元素名称
item.getString() 获取上传数据
item.getString("UTF-8") 获取上传数据,处理中文乱码
item.getContentype() 获取上传文件类型【文件项】
item.getInputStream() 获取文件流【文件项】
item.getName(); 获取文件名【文件项】
item.write(new File("文件路径")); 把文件写入指定目录
item.delete 删除临时文件
*/
*******************************************************
* ##################################
!!!!! 本功能的需求:!!!!!
* 实现一个完整的文件上传
* 1、设置单个文件不能超过30M
* 2、设置总大小不能超过50M
* 3、上传目录,上传到项目资源目录下的upload目录下
* 4、上传文件不能覆盖,解决上传文件文件名不重名问题
* ##################################
@RequestMapping("shangchuan")
public String FileUpload(HttpServletRequest request,HttpServletResponse respose) throws ServletException,IOException{
//1、创建文件上传工场类
FileItemFactory fileItemFactory=new DiskFileItemFactory();
//2、创建文件上传核心类对象
ServletFileUpload upload=new ServletFileUpload(fileItemFactory);
//upload.setFileItemFactory(fileItemFactory);
//【一、设置单个文件最大:30M】
upload.setFileSizeMax(30*1024*1024);//30M
//【二、设置总文件大小:50M】
upload.setSizeMax(50*1024*1024);
//3、判断当前表单是否为文件上传表单
if(upload.isMultipartContent(request)){
//4、把请求数据转换为FileItem对象集合*(FileItem代表每一个上传主键)
try {
List<FileItem> list=upload.parseRequest(request);
//5、遍历,得到每一个上传项
for(FileItem item:list){
//6、遍历时要判断是普通表单还是文件上传的数据
if(item.isFormField()){
//普通表单
//获取元素名称
String fileName=item.getFieldName();
//获取值
String value=item.getString("UTF-8");
System.out.println(fileName+value);
}else{
//文件上传表单(对应前端 type=file)
/******** 文件上传 ***********/
//处理文件上传
//获取文件名
String name=item.getName();
//重新生成文件名
//获取上传的目录路径
String basePath=request.getSession().getServletContext().getRealPath("/upload");
//创建文件对象
File file =new File(basePath,name);
//写入文件
item.write(file);
item.delete();//删除临时文件
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
System.out.println("当前表单不是文件上传表单,不处理");
}
return null;
}
标签:parser 请求 servlet ret mfa 需求 img post请求 factory
原文地址:http://www.cnblogs.com/weiyuanquyu/p/7508002.html