使用commons-fileupload和commons-io解析表单,做原生文件上传

使用commons-fileupload和commons-io解析表单,做原生文件上传

这里介绍使用apache的文件上传工具类做原生的文件上传

  1. 创建一个动态web项目,并把两个必要的jar包放到lib目录下,即commons-fileuploadcommons-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);
	}

  1. 写一个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>
  1. 启动服务测试
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

说明:如果你的项目跑在tomcat中,那么你就没有必要引用这两个jar包,tomcat的lib下面自带了tomcat-coyote.jar包含自家的那两个jar,导包时就导tomcat.util中的包即可。在满足需求的情况下,包越少越好,项目越轻量越好。另外,使用fileItem.getName()获取到的文件名可能仅仅是文件名也可能是包含文件名的绝对路径,最好获取截取后的文件名,我用谷歌测试获取到的直接是文件名不需要截取,否则文件名会变成带盘符带目录的文件名。

在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值