目录

一、导入jar包

二、转换表单

三、实现文件上传

四、FileItem对象的常用方法

五、FileUpload


一、导入jar包

导入jar包commons-io-2.2.jar和commons-fileupload-1.4.jar两个包 可以从官网直接下

二、转换表单

在表单中,添加一个enctype="multipart/form-data"设置。提交方式必须使用post形式

使用encrype设置为二进制表单

前端测试代码

<form action="tupian.do" method="post" enctype="multipart/form-data"><input type="file" name="photo"><input type="text" name="uname"><input type="submit" value="提交"></form>

三、实现文件上传

工具类可以直接调用,注意需要修改request.getServletContext().getRealPath("/");路径为自己保存的路径

使用FileUpload实现数据的上传的步骤

步骤一:创建FileItemFactory

步骤二:ServletFileUpload

步骤三:设置对request进行解析ServletFileUoload.parseRequest

步骤四;获取到所有表单中的字段FileItem

步骤五:判断是否是一个文件

步骤六:将文件上传到对应位置

代码如下

package controller;import domain.UserInfo;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.UUID;public class RegistController extends HttpServlet {protected void doPost(HttpServletRequest req, HttpServletResponse reap) throws IOException {FileItemFactory factory=new DiskFileItemFactory();ServletFileUpload fileUpload=new ServletFileUpload(factory);List<FileItem> fileItems=null;try {fileItems=fileUpload.parseRequest(req);} catch (FileUploadException e) {throw new RuntimeException(e);}UserInfo userInfo=new UserInfo();for(FileItem fileItem:fileItems){if(fileItem.isFormField()){if("username".equals(fileItem.getFieldName())){userInfo.setLoginName(fileItem.getString("utf-8"));}else if("password".equals(fileItem.getFieldName())){userInfo.setPassword(fileItem.getString());}else if("email".equals(fileItem.getFieldName())){userInfo.setEmail(fileItem.getString());}else {userInfo.setMobile(fileItem.getString());}}else{String realFile=req.getServletContext().getRealPath("/upload/headphone");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) {throw new RuntimeException(e);}userInfo.setHeadphone("upload/headphone"+newName);reap.sendRedirect("/login.jsp");}}}
}

四、FileItem对象的常用方法

System.out.println(fileItem.getFiledName());//获取表单传输的name

System.out.println(fileItem.getName()); //只有是上传文件内容时,才能够获取到文件名称

System.out.println(fileItem.getSize());//获取到文件大小

System.out.println(fileItem.getString());//获取到当前FileItem对应值

System.out.prinln(fileItem.getContentType());//是上传文件内容时,才能获取到文件类型

System.out.prinln(fileItem.isFormField());//如果是普通字段,该值就是true,否则就是false

五、FileUpload

enctype为表单提交时所采取的传输编码方式,默认为application/x-www-form-urlencode,在默认情况下对于上传的文件只能获取一个文件名。为了能够传输文件内容就需要采用multipart/form-data,此时提交表单后请求体中会对文件进行解析,若为其他属性直接获取它的值,不同的属性会以分割线分割.

核心类:

DiskFileItemFactory:磁盘文件项工厂,是文件上传的核心类,其他操作都依靠该对象进行
ServletFileUpload:服务解析类,用于解析Servlet服务中的request请求,可以调用该类的方法parseRequest(HttpServletRequest request)解析请求中的参数,返回一个List集合类型为FileItem
FileItem:请求参数的实体类,用于存放参数。可以调用getString(String encoding)方法获取普通属性的值,getName()获取属性的名称。对于文件参数可以通过isFormField()方法判断,返回为true为普通属性,false为文件属性。FileItem类提供了获取文件输入流的方法getInputStream()用于文件IO操作。

构造方法
1) public DiskFileItemFactory()

采用默认临界值和系统临时文件夹构造文件项工厂对象。

2) public DiskFileItemFactory(int sizeThreshold,File repository)

采用参数指定临界值和系统临时文件夹构造文件项工厂对象。

3) FileItem createItem()
       根据DiskFileItemFactory相关配置将每一个请求消息实体项目创建成DiskFileItem 实例,并返回。该方法从来不需要我们亲自调用,FileUpload组件在解析请求时内部使用。

JAVAWEB实现图片文件上传相关推荐

  1. .Net Core 图片文件上传下载

    当下.Net Core项目可是如雨后春笋一般发展起来,作为.Net大军中的一员,我热忱地拥抱了.Net Core并且积极使用其进行业务的开发,我们先介绍下.Net Core项目下实现文件上传下载接口. ...

  2. Office文档上传后实时转换为PDF格式_图片文件上传后实时裁剪_实现在线预览Office文档

    Office文档上传后实时转换为PDF格式_图片文件上传后实时裁剪 前置条件 安装LibreOffice 安装OpenOffice 安装Unoconv 安装ImageMagick.x86_64 安装G ...

  3. springmvc图片文件上传接口

    springmvc图片文件上传 用MultipartFile文件方式传输 Controller package com.controller;import java.awt.image.Buffere ...

  4. tomcat temp 大量 upload 文件_问题:JavaWeb中实现文件上传的方式有哪些?

    问题:JavaWeb中实现文件上传的方式有哪些? 上回我们说了下文件下载的方式有哪些,这次我们从不同的环境下简单来说说文件上传的方式有哪些. 文件上传的方式 Servlet2.5 方式 Servlet ...

  5. axios文件上传 formdata_基于业务场景下的图片/文件上传方案总结

    图片/文件上传组是企业项目开发中必不可少的环节之一, 但凡涉及到用户模块的都会有图片/文件上传需求, 在很多第三方组件库(ant desigin, element ui)中它也是基础组件之一. 接下来 ...

  6. php是视频还是图片格式,php 视频、音频和图片文件上传,该如何解决

    PHP code<?php ob_start(); $uploadDir = dirname(__FILE__).'/upload'; //自动创建目录 if(!file_exists($upl ...

  7. Java实现图片文件上传

    Java实现图片文件上传 Java实现后台图片上传,将上传图片的接口进行分层,便于维护接口. 接口部分(interface) 将接口分为单图片上传以及多图片上传 public interface Fi ...

  8. php中图片文件上传,显示缩略图

    php中图片文件上传,显示缩略图 htm代码块: <meta charset="utf-8" /> <style>img {max-width: 100px ...

  9. JavaWeb学习总结——文件上传和下载

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

最新文章

  1. 获取本地公网ip_本地与远程linux服务器之间传输数据
  2. Big Sur:加州一号公路和比克斯比大桥
  3. NSLog (Log信息的输出)
  4. leetcode1482. 制作 m 束花所需的最少天数(二分法)
  5. 学习笔记:CentOS7学习之二十二: 结构化命令case和for、while循环
  6. [Java] 蓝桥杯ALGO-93 算法训练 反置数
  7. rsync 07-confxml.xml配置文件
  8. easyui datagrid 去掉外边框及行与行之间的横线标题字体
  9. PPT实现倒计时功能(VBA实现)
  10. 基于物理流体模拟(PFSPH和DFSPH)
  11. 【心理咨询师考试笔记】基础理论(二)——人格心理学
  12. be idle sometimes to_一生中不该错过的经典语录,深刻有道理,看了让人爱不释手!...
  13. html如何生成条形码,前端如何生成条形码---JsBarcode
  14. 04. Redis 环境搭建-单实例
  15. laravel维护模式 MaintenanceMode
  16. 星星之火-38:20M的LTE带宽,为什么是1200个子载波?
  17. vce题库制作/刷题软件/
  18. 年度报表html5,新浪微博年度财务报表html5手机动画模板
  19. 首席新媒体商学院创始人黎想:社群裂变失败,我的3点教训
  20. mysql唯一索引与null

热门文章

  1. 快速一键部署测试环境,降低环境配置风险
  2. 京东物流联手山西图灵打造智能供应链,让阅读更有趣...
  3. 机器人控制的基本方法
  4. 人机对战?学会Python简直开挂!
  5. OpenAI图标的几何原理
  6. bilicav法求解高阶次勒让德函数
  7. Oracle 查询慢排查
  8. 黑龙江省计算机专业好的学校排名,计算机专业热门院校推荐:黑龙江大学
  9. 谈谈自己对offer的选择
  10. 富士康今年将裁员1万人,郭台铭21亿元投向人工智能