您的位置:首页 > 编程语言 > Java开发

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

2017-09-15 16:37 741 查看

JavaWeb实现文件的上传

文件上传的前提    

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

2、form表单的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);

}
4000

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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: