文件上传(FileUpload)

        文件上传,它是将一个表单转换成一个二进制的数 据流提交,所以不能够使request.getParameter形式获取参数。因此需要将表单转换成二进制表单。

添加依赖

<!-- 文件上传组件包 -->
<!-- https://mvnrepository.com/artifact/common s-fileupload/commons-fileupload -->
<dependency>
        <groupId> commons- fileupload </groupId>
        <artifactId> commons- fileupload </artifactId>
        <version> 1.4 </version>
</dependency>

转换表单 

在表单中,添加一个 enctype="multipart/form-data"设置表单为二进制表单。提交方式必须使用 post 形式。
  • enctype 属性规定在将表单数据发送到服务器之前如何对其进行编码。
  • multipart/form-data:将表单的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件。

方法

//步骤1:创建FileItemFactory
FileItemFactory factory = new DiskFileItemFactory() ;
//步骤2:ServletFileUpload
ServletFileUpload fileUpload = new ServletFileUpload(factory) ;
//步骤3:设置对request进行解析 

List<FileItem> fileItems = null;
try {  
    fileItems = fileUpload.parseRequest(req); //对request进行解析 
} catch (FileUploadException e) { 
    e.printStackTrace(); 36 
}
UserInfo userInfo = new UserInfo() ;
//步骤4:获取到所有的表单中的字段 FileItem
for (FileItem fileItem : fileItems) {
//步骤5:判断是否一个文件 
if(fileItem.isFormField()) {
    //getFieldNam:获取表单字段名字 getString:获取表单字段的值
    System.out.println(fileItem.getFieldNam e() + ":" + fileItem.getString());
    if("username".equals(fileItem.getFieldN ame())) {
        userInfo.setUserName(fileItem.getString ());
    }
}else{
    //步骤6:将文件上传到对应的位置
    //步骤6-1:文件上传的位置设定
    String realFile = req.getServletContext().getRealPath("/upload");
    //真实目录的对象
    File realDir = new File(realFile) ;
    //创建目录 
    if(!realDir.exists()) { 
        realDir.mkdirs() ; 
    }
     //获取到文件的名字 
    String fileName = fileItem.getName() ;
    //将文件名称一分为二,获取到文件的扩展名
    String extName = fileName.substring(fileName.lastIndexOf( ".")) ;
    
    //新文件名名称创建,避免有相同的文件名,造成文件覆盖
    String newName = UUID.randomUUID().toString() + extName ;
    //实现文件的上传 
    File uploadFile = new File(realFile,newName) ;  
    try {  
        fileItem.write(uploadFile); 
    } catch (Exception e) {  
        e.printStackTrace();  
    }
    userInfo.setHeadphone("upload/" + newName); 
     }  
    }  
    } 
} 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值