学习总结之JavaWeb实现文件上传

JavaWeb实现文件的上传

文件上传的前提    

1、提供form表单,method必须是post

2form表单的enctype必须是multipart/form-data

3、提供input type="file"类的上传输入域

在Web开发系统应用中,文件上传一般采用apache的开源工具common-fileupload文件上传组件

1,导入commons-fileupload相关jar包:

2.fileupload的核心类有:

DiskFileItemFactory、ServletFileUpload、FileItem。

3,解析原理:


使用Apache文件上传组件处理文件上传,步骤如下:
		
			2.1 创建一个创建一个DiskFileItemFactory工厂
					DiskFileItemFactory factory = new DiskFileItemFactory();
				
            2.2 创建一个文件上传解析器
					ServletFileUpload upload = new ServletFileUpload(factory);
				 
            2.3 解决上传文件名的中文乱码
					upload.setHeaderEncoding("UTF-8"); 
					
			2.4 使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项
					List<FileItem> list = upload.parseRequest(request);
					
			2.5  创建一个Map集合用于封装表单项的数据
					Map<String,String> map = new HashMap<String, String>();
					
			2.6  迭代FileItem表单项
					for(FileItem item : list){
						2.6.1  //如果FileItem中封装的是普通表单项
							if(item.isFormField()){
								//获取表单项的字段名(name属性)
								String name = item.getFieldName();
								//得到字段值,并解决中文乱码问题
								String value = item.getString("UTF-8");
								//向Map中赋值
								map.put(name,value);
								
							}
						2.6.2 //如果FileItem中封装的是文件表单项
							else{
								//得到长传的文件名称
								String filename = fileItem.getName();
								
								/*处理文件名,去除上传文件名的路径部分,只保留文件部分
								注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如:  c:\a\b\1.txt,
								而有些只是单纯的文件名,如:1.txt*/
								if(filename!=null){
									filename = FilenameUtils.getName(filename);
								}
								
								//获取文件的类型
								String extension = FilenameUtils.getExtension(filename);
								
								//限制上传文件的类型不能是jsp和exe类型
								if(!("jsp".equals(extension) || "exe".equals(extension))){
									//文件上传
									fileItem.write(new File(storeDirectory,filename));
									//删除临时文件
									fileItem.delete();  
									}
									//将文件表单项的name和value保存到map中
									map.put(fileItem.getFieldName(),filename);
								}
							}
					}



























猜你喜欢

转载自blog.csdn.net/poison6/article/details/77993370