文章目录

  • 实现步骤
  • 核心API
  • 详情代码

在使用图片上传功能时,本文章采用表单提交的方法来上传,所以在表单当中需要加上参数enctype="multipart/form-data"

<form name="form1" method="post"action="<%=request.getContextPath()%>/picture.do?method=addPage"onsubmit="return checkForm()" enctype="multipart/form-data"><table border="1"><tr><th><input type="file" id="imgFile" name="image"onchange="imgPreview(this)" accept="image/*" /></th></tr><td><input style="float: right" type="submit" value="添加至图片墙" /></td></tr></table></form>

实现步骤

  1. 创建DiskFileItemFactory对象,设置缓冲区大小和临时文件目录。
  2. 使用DiskFileItemFactory 对象创建ServletFileUpload对象,并设置上传文件的大小限制。
  3. 调用ServletFileUpload.parseRequest方法解析request对象,得到一个保存了所有上传内容的List对象。
  4. list进行迭代,每迭代一个FileItem对象,调用其isFormField方法判断是否是上传文件:
    1. 为普通表单字段,则调用getFieldNamegetString方法得到字段名和字段值。
    2. 为上传文件,则调用getInputStream方法得到数据输入流,从而读取上传数据。

核心API

核心API—DiskFileItemFactory
DiskFileItemFactory 是创建FileItem 对象的工厂,这个工厂类常用方法:

  1. public void setSizeThreshold(int sizeThreshold) :设置内存缓冲区的大小,默认值为10K。当上传文件大于缓冲区大小时,fileupload组件将使用临时文件缓存上传文件。
  2. public void setRepository(Java.io.File repository) :指定临时文件目录,默认值为System.getProperty(“java.io.tmpdir”).
  3. public DiskFileItemFactory(int sizeThreshold,java.io.File repository):构造函数

核心API—-ServletFileUpload
ServletFileUpload 负责处理上传的文件数据,并将表单中每个输入项封装成一个FileItem对象中。常用方法有:

  1. boolean isMultipartContent(HttpServletRequest request):判断上传表单是否为multipart/form-data类型
    2.List parseRequest(HttpServletRequest request):解析request对象,并把表单中的每一个输入项包装成一个fileItem对象,并返回一个保存了所有FileItemlist集合。
  2. setFileSizeMax(long fileSizeMax):设置上传文件的最大值(单个文件),用于设置单个上传文件的最大尺寸限制,以防止客户端恶意上传超大文件来浪费服务器端的存储空间。其参数是以字节为单位的long型数字。
  3. setSizeMax(long sizeMax) :设置上传文件总量的最大值(所有上传文件),用于设置请求消息实体内容(即所有上传数据)的最大尺寸限制,以防止客户端恶意上传超大文件来浪费服务器端的存储空间。其参数是以字节为单位的long型数字。
  4. setHeaderEncoding(java.lang.String encoding) :设置编码格式。在文件上传请求的消息体中,除了普通表单域的值是文本内容以外,文件上传字段中的文件路径名也是文本,在内存中保存的是它们的某种字符集编码的字节数组,Apache文件上传组件在读取这些内容时,必须知道它们所采用的字符集编码,才能将它们转换成正确的字符文本返回。

核心API—FileItem
FileItem类的常用方法:

  1. boolean isFormField()isFormField方法用于判断FileItem类对象封装的数据是一个普通文本表单字段,还是一个文件表单字段,如果是普通表单字段则返回true,否则返回false
  2. String getName():用于获得文件上传字段中的文件名。注意IE或FireFox中获取的文件名是不一样的,IE中是绝对路径,FireFox中只是文件名。
  3. String getFieldName():用于返回表单标签name属性的值。
  4. void write(File file):用于将FileItem对象中保存的主体内容保存到某个指定的文件中。如果FileItem对象中的主体内容是保存在某个临时文件中,该方法顺利完成后,临时文件有可能会被清除。该方法也可将普通表单字段内容写入到一个文件中,但它主要用途是将上传的文件内容保存在本地文件系统中。
  5. String getString():用于将FileItem对象中保存的数据流内容以一个字符串返回,它有两个重载的定义形式:
    1. public Java.lang.String getString();
    2. public java.lang.String getString(java.lang.String encoding) throws java.io.UnsupportedEncodingException,
    3. 前者使用缺省的字符集编码将主体内容转换成字符串,后者使用参数指定的字符集编码将主体内容转换成字符串。如果在读取普通表单字段元素的内容时出现了中文乱码现象,请调用第二个getString方法,并为之传递正确的字符集编码名称。
  6. void delete()delete方法用来清空FileItem类对象中存放的主体内容,如果主体内容被保存在临时文件中,delete方法将删除该临时文件。尽管当FileItem对象被垃圾收集器收集时会自动清除临时文件,但及时调用delete方法可以更早的清除临时文件,释放系统存储资源。

详情代码

private void pictrueUpload(HttpServletRequest request, HttpServletResponse response)throws IOException, FileUploadException, ClassNotFoundException, SQLException {// 设置相应编码集response.setContentType("text/html;charset=UTF-8");// 定义变量// 文件保存时候的名字String fileSaveName = null;// 解析的结果List<FileItem> formItemList = null;// 设置图片保存路径,本次使用本电脑系统作为服务器String path = this.getServletContext().getRealPath("/") + "WEB-INF/image";System.out.println("图片的存储路径为:" + path);// 判断是否存在File file = new File(path);if (!file.exists()) {file.mkdir();// 如果不存在就创建}// 创建工厂类DiskFileItemFactory factory = new DiskFileItemFactory();// 创建具体功能类ServletFileUpload upload = new ServletFileUpload(factory);// 处理中文upload.setHeaderEncoding("utf-8");// 数据传进去,获取具体解析到的结果formItemList = upload.parseRequest(request);// 判断是否包含数据System.out.println(formItemList.size());if (formItemList != null && formItemList.size() > 0) {for (FileItem fileItem : formItemList) {// 判断是否是文件类型if (!fileItem.isFormField()) {String fileName = fileItem.getName(); // 获取上传文件的名字// 获取后缀String prifix = fileName.substring(fileName.lastIndexOf(".") + 1);System.out.println("后缀为:" + prifix);// 创建ID绑定session,区分用户String id = UUID.randomUUID().toString();fileSaveName = id + "." + prifix;if (prifix.length() == 0) {fileSaveName = "(NULL)";}System.out.println("文件保存的名字为:" + fileSaveName);// 使用commons-io把图片复制进本地FileUtils.copyInputStreamToFile(fileItem.getInputStream(), new File(path + "/" + fileSaveName));}}}String virtualPath = fileSaveName;// 添加数据库pictureService.save(virtualPath);// 重定向response.sendRedirect(request.getContextPath() + "/picture.do?method=query");}

Java图片上传功能相关推荐

  1. ckeditor java 上传_java使用CKEditor实现图片上传功能

    java如何使用ckeditor实现图片上传功能,具体内容如下 1.根据实际需要下载指定的ckeditor 2.删除文件ckeditor/plugins/image/dialogs/image.js预 ...

  2. Smiditor实现图片上传功能

    Simditor 是 Tower 开源的一个基于浏览器所见即所得的文本编辑器. 相比传统的编辑器它的特点是: 功能精简,加载快速 输出格式化的标准 HTML 每一个功能都有非常优秀的使用体验 兼容的主 ...

  3. java图片上传保存至服务器并返回可下载的URL

    java图片上传保存至服务器并返回可下载的URL 1.需求来源 2.解决思路 3.开始干活(直接上代码) 4.总结 1.需求来源 上周要做一个功能,需求是: 微信小程序开发的程序会传一张图片到后台ja ...

  4. 用jsp实现简单的图片上传功能

    用jsp实现简单的图片上传功能 1 先做一个页面,选择上传的图片 <body><form action="uploadServlet" enctype=" ...

  5. java图片上传(mvc)

    最近有开始学起了java,好久没写文章了,好久没来博客园了.最近看了看博客园上次写的图片上传有很多人看,今天在一些篇关于java图片上传的.后台接收用的是mvc.不墨迹了,直接上图. 先看目录结构.i ...

  6. 关于微信内置浏览器,打开图片上传功能,调用的问题

    关于微信内置浏览器,打开图片上传功能,调用的问题 前段时间,项目完结测试的时候,同事打开魅族手机测试,无意中发现一个奇葩的问题! 描述: 显示的是文件系统,列表式的,没有调用相机的功能图标,为什么呢? ...

  7. (转)淘淘商城系列——实现图片上传功能

    http://blog.csdn.net/yerenyuan_pku/article/details/72808000 上文我们使用FastDFS-Client进行了简单的文件上传操作测试,淘淘商城项 ...

  8. PHP实现图片上传功能

    PHP实现图片上传功能: 第一个页: picupload.php 代码如下: <form action="picop.php"  method="post" ...

  9. ckfinder php 配置,PHP中Ckeditor+Ckfinder配置图片上传功能_PHP教程

    从标题来看我们知道Ckeditor不支持图片上传功能,它是需要一个组件Ckfinder才可以支持上传图片, 本文章就来详细的介绍了如何配置Ckeditor+Ckfinder实现图片上传的功能. 第一: ...

最新文章

  1. 青春是如此美好,又怎忍平凡度过
  2. 职场新人成功修炼五诀 迅速在职场占一席之地
  3. Hadoop Streaming框架使用(一)
  4. bs4抓起大众点评的用户评论
  5. spring-wind 搭建过程问题记录
  6. Maven resource标签
  7. Vim的新一代补全插件:coc.nvim
  8. C/C++信息隐写术(一)之认识文件结构
  9. 【专栏必读】(计算机组成原理题目题型总结)计理期末考试408统考算机组成原必考题型总结
  10. 数学物理方法pdf_中考状元笔记九科(语文+数学+物理+化学+英语+历史+地理+政治+生物)(高清PDF);...
  11. Spring Security系列之Spring Social实现微信社交登录(九)
  12. js方法实现rgb颜色转换成16进制格式的代码的方法
  13. 一行代码即可删除C盘几十G垃圾,清理c盘垃圾的cmd命令
  14. java断点下载文件_java实现文件断点续传下载功能
  15. 安装ps提示重新启动计算机,安装Service Pack或执行DCPROMO后,出现错误或服务器重新启动 - Product Support Quick Note (PSQN) - 276184...
  16. 实时云渲染+虚拟仿真实验解决方案
  17. BAT批处理如何去写Windows防火墙规则
  18. 基于STM32+FreeRtos+ESP8266+MQTT连接阿里云
  19. 再次轻度破解EXE文件
  20. python中占位符的使用

热门文章

  1. 如何远程登入Linux系统?
  2. sitk::ERROR: No ImageJ/Fiji application found.
  3. 国产飞腾安装Python依赖库
  4. 第三方登录出现授权失败,错误码:100044
  5. 如何利用IT为企业开拓新利润增长渠道
  6. 解决《windows 能连接cmcc 但是浏览器打不开登入界面》问题
  7. 亮个相吧小宝贝儿,五款压箱底的软件
  8. vue生命周期钩子函数详解
  9. Leetcode 679. 24 点游戏 (暴力)
  10. 远程启动hadoop,ssh远程执行命令报错!hdfs命令不存在!