使用commons-fileupload和commons-io解析表单,做原生文件上传
这里介绍使用apache的文件上传工具类做原生的文件上传
- 创建一个动态web项目,并把两个必要的jar包放到lib目录下,即commons-fileupload和commons-io
2.写一个servlet类且必须是doPost方法(或者在doPost中调用doGet),表单一定是POST请求,并在web.xml文件中做好配置,上图中已经配置好了web.xml
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
//解析三步
//创建工厂
FileItemFactory factory = new DiskFileItemFactory();
//创建解析器对象
ServletFileUpload sfu = new ServletFileUpload(factory);
//解析request对象,得到用户请求对象中的所以数据,返回一个List<FileItem>
List<FileItem> parseRequest = sfu.parseRequest(request);
for (FileItem fileItem : parseRequest) {
if(fileItem.isFormField()) {//表单数据,打印
System.out.println(fileItem.getFieldName()+":"+fileItem.getString("UTF-8"));
} else {//文件,保存在file目录下
//创建目录
String webRootPath = request.getServletContext().getRealPath("/");
String dirPath = "file";
String savePath = webRootPath + dirPath;
String originalFilename = fileItem.getName();
String extensionFilename = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
String newFilename = originalFilename.substring(0, originalFilename.lastIndexOf(".")) + "_"+UUID.randomUUID()+"."+extensionFilename;
File file = new File(savePath);
if(!file.exists() && !file.isDirectory()) {
file.mkdirs();//不存在该目录则创建该目录
}
file = new File(savePath,newFilename);
fileItem.write(file);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
- 写一个index.jsp页面,写一个包含文件上传的简单表单
<h1>使用commons-fileupload和commons-io解析表单</h1>
<form action="uploadfile" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="username"><br><br>
文 件:<input type="file" name="file"><br><br>
<button type="submit">提交</button>
</form>
- 启动服务测试