JAVA中的文件上传技术-upload
01.背景介绍
在实际的工程项目中,经常回遇到文件上传的状况,例如在注册一个网站后,需要上传个人的照片信息,门户网站上传公示文件等。为了应对这个问题,apache组织也为此做了准备,提供了一些使用比较方便的jar包,文末会提供程序源码,当然也会有jar包。
本博文的javaweb环境是
使用的工具是eclipse,服务器是Tomcat
02.程序介绍
前端:
<body>
<div align="center">
<!-- 一定要注意这个 enctype="multipart/form-data" method="post"-->
<form action="/upload/demo1" enctype="multipart/form-data" method="post">
用户名:<input type="text" name="username" /><br>
文件 :<input type="file" name="f" /><br>
<input type="submit" /><br>
</form>
</div>
</body>
后端的servlet:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//是不可以使用request.getParameter("username");获取属性的
//创建磁盘文件项工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
//创建核心上传对象
ServletFileUpload upload = new ServletFileUpload(factory);
//解析请求
try {
List<FileItem> list =upload.parseRequest(request);
//遍历list
for (FileItem fi : list) {
//判断是普通的上传组件,还是文件上传组件
if(fi.isFormField()) {//普通上传组件
//获取name属性
String name = fi.getFieldName();
//获取值
String value = fi.getString("utf-8");//这里为了测试,写的是获取普通标签的值
System.out.println(name+"::"+value);
}else {
//文件上传组件
//获取name属性
String name = fi.getFieldName();
//获取文件的名称,这样处理的原因是解决不同浏览器文件名不同,可能带有路径
String fileName=fi.getName().substring(fi.getName().lastIndexOf("\\")+1);
//获取文件的内容
InputStream is = fi.getInputStream();
//获取文件的存储路径
String path = this.getServletContext().getRealPath("/upload/");
//保存文件
FileOutputStream os = new FileOutputStream(new File(path,fileName));
//将输入流写到输出流
IOUtils.copy(is,os);
//关闭资源
os.close();
is.close();
//删除临时文件
fi.delete();
System.out.println(fileName+"上传完毕!");
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
03.程序运行结果