java基础篇---文件上传(commons-FileUpload组件)
上一篇讲解了smartupload组件上传,那么这一篇我们讲解commons-FileUpload组件上传
- 1创建磁盘工厂:DiskFileItemFactory factory = new DiskFileItemFactory();
- 创建处理工具:ServletFileUpload upload = new ServletFileUpload(factory);
- 设置上传文件大小:upload.setFileSizeMax(3145728);
- 接收全部内容:List<FileItem> items = upload.parseRequest(request);
上传原理
所以当使用Iterator依次取出每一个FileItem对象的时候,就可以使用FileItem类中的isFormField()方法来判断当前操作的内容是普通的文本还是上传文件,如果是上传文件,则将文件的内容依次取出;如果是普通的文本,则直接通过getString()方法取得具体的信息。
- <html>
- <head><title>commons-FileUpload组件上传</title></head>
- <body>
- <form action="fileupload_demo01.jsp" method="post" enctype="multipart/form-data">
- 姓名:<input type="text" name="uname"><br>
- 照片:<input type="file" name="pic"><br>
- <input type="submit" value="上传">
- <input type="reset" value="重置">
- </form>
- </body>
- </html>
jsp代码
- <%@ page contentType="text/html" pageEncoding="GBK"%>
- <%@ page import="java.util.*"%>
- <%@ page import="org.apache.commons.fileupload.*"%>
- <%@ page import="org.apache.commons.fileupload.disk.*"%>
- <%@ page import="org.apache.commons.fileupload.servlet.*"%>
- <html>
- <head><title>commons-FileUpload组件上传</title></head>
- <body>
- <%
- DiskFileItemFactory factory = new DiskFileItemFactory() ;
- ServletFileUpload upload= new ServletFileUpload(factory) ;
- upload.setFileSizeMax(3 * 1024 * 1024) ; // 只能上传3M
- List<FileItem> items = upload.parseRequest(request) ; // 接收全部内容
- Iterator<FileItem> iter = items.iterator() ;
- while(iter.hasNext()){
- FileItem item = iter.next() ;
- String fieldName = item.getFieldName() ; // 取得表单控件的名称
- %>
- <ul><h4><%=fieldName%> --> <%=item.isFormField()%></h4>
- <%
- if(!item.isFormField()){ // 不是普通文本
- String fileName = item.getName() ; // 取得文件的名称
- String contentType = item.getContentType() ; // 文件类型
- long sizeInBytes = item.getSize() ;
- %>
- <li>上传文件名称:<%=fileName%>
- <li>上传文件类型:<%=contentType%>
- <li>上传文件大小:<%=sizeInBytes%>
- <%
- } else {
- String value = item.getString() ;
- %>
- <li>普通参数:<%=value%>
- <%
- }
- %> </ul>
- <%
- }
- %>
- </body>
- </html>
组件上传代码实例二
- <html>
- <head><title>commons-FileUpload组件上传</title></head>
- <body>
- <form action="fileupload_demo02.jsp" method="post" enctype="multipart/form-data">
- 姓名:<input type="text" name="uname"><br>
- 照片:<input type="file" name="pic1"><br>
- 照片:<input type="file" name="pic2"><br>
- 照片:<input type="file" name="pic3"><br>
- <input type="submit" value="上传">
- <input type="reset" value="重置">
- </form>
- </body>
- </html>
JSP代码
- <%@ page contentType="text/html" pageEncoding="GBK"%>
- <%@ page import="java.util.*,java.io.*"%>
- <%@ page import="org.apache.commons.fileupload.*"%>
- <%@ page import="org.apache.commons.fileupload.disk.*"%>
- <%@ page import="org.apache.commons.fileupload.servlet.*"%>
- <%@ page import="cn.mldn.lxh.util.*"%>
- <html>
- <head><title>commons-fileUpload组件上传实例二</title></head>
- <body>
- <%
- DiskFileItemFactory factory = new DiskFileItemFactory() ;
- factory.setRepository(new File(this.getServletContext().getRealPath("/") + "uploadtemp")) ; // 更准确的说是一个临时文件
- ServletFileUpload upload = new ServletFileUpload(factory) ;
- upload.setFileSizeMax(3 * 1024 * 1024) ; // 只能上传3M
- List<FileItem> items = upload.parseRequest(request) ; // 接收全部内容
- Iterator<FileItem> iter = items.iterator() ;
- IPTimeStamp its = new IPTimeStamp(/* request.getRemoteAddr() */) ;
- while(iter.hasNext()){
- FileItem item = iter.next() ;
- String fieldName = item.getFieldName() ; // 取得表单控件的名称
- %>
- <ul><h4><%=fieldName%> --> <%=item.isFormField()%></h4>
- <%
- if(!item.isFormField()){ // 不是普通文本
- File saveFile = null ;
- InputStream input = null ;
- OutputStream output = null ;
- input = item.getInputStream() ;
- output = new FileOutputStream(new File(this.getServletContext().getRealPath("/")+"upload"+File.separator+its.getIPTimeRand()+"."+item.getName().split("\\.")[1])) ;
- int temp = 0 ;
- byte data[] = new byte[512] ;
- while((temp=input.read(data,0,512))!=-1){
- output.write(data) ; // 分块保存
- }
- input.close() ;
- output.close() ;
- } else {
- String value = item.getString() ;
- %>
- <li>普通参数:<%=value%>
- <%
- }
- %> </ul>
- <%
- }
- %>
- </body>
- </html>
注意:本代码在建立项目时需要在项目名称下创建upload文件夹才能正常运行。
FileUpload组件的不便之处:
- 无法像使用request.getParameter()方法那样准确的取得提交的参数;
- 无法像使用request.getParameterValues()那样准确的取得一组提交参数;
- 所有的上传文件都需要进行依次的判断,才能够分别保存,不能一次性批量保存。
java基础篇---文件上传(commons-FileUpload组件)的更多相关文章
- java基础篇---文件上传(smartupload组件)
文件上传几乎是所有网站都具有的功能,用户可以将文件上传到服务器的指定文件夹中,也可以保存在数据库中,本篇主要说明smartupload组件上传. 在讲解smartupload上传前,我们先来看看不使用 ...
- java基础篇---文件上传(组件)
转载自:http://www.cnblogs.com/oumyye/p/4234969.html 文件上传几乎是所有网站都具有的功能,用户可以将文件上传到服务器的指定文件夹中,也可以保存在数据库中,本 ...
- JAVA基础篇—文件上传下载
/index.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pa ...
- .JavaWeb文件上传和FileUpload组件使用
.JavaWeb文件上传 1.自定义上传 文件上传时的表单设计要符合文件提交的方式: 1.提交方式:post 2.表单中有文件上传的表单项:<input type="file" ...
- 文件上传 - Commons FileUpload介绍
概述 FileUpload能够以多种不同的方式使用,具体取决于应用程序的要求.在最简单的情况下,调用单个方法来解析servlet请求,然后处理解析出来的Item集合.此外也可以自定义FileUploa ...
- java支持断点续传文件上传和下载组件
java两台服务器之间,大文件上传(续传),采用了Socket通信机制以及JavaIO流两个技术点,具体思路如下: 实现思路: 1.服:利用ServerSocket搭建服务器,开启相应端口,进行长连接 ...
- 文件上传使用FileUpload组件进行代码实现
使用FileUpload组件进行代码实现 实现步骤 1. 获取解析器工厂: DiskFileItemFactory 2. 获取解析器对象: ServletFileUpload 3. 解析request ...
- Java中实现文件上传下载的三种解决方案
第一点:Java代码实现文件上传 FormFile file=manform.getFile(); String newfileName = null; String newpathname=null ...
- 【Java】JavaWeb文件上传和下载
文件上传和下载在web应用中非常普遍,要在jsp环境中实现文件上传功能是非常容易的,因为网上有许多用java开发的文件上传组件,本文以commons-fileupload组件为例,为jsp应用添加文件 ...
随机推荐
- C# 使用系统方法发送异步邮件
项目背景: 最近在对几年前的一个项目进行重构,发现发送邮件功能需要一定的时间来处理,而由于发送是同步的因此导致在发送邮件时无法执行后续的操作 实际上发送邮件后只需要将发送结果写入系统日志即可对其他业务 ...
- 【Oracle】详解Oracle中NLS_LANG变量的使用
目录结构: contents structure [+] 关于NLS_LANG参数 NSL_LANG常用的值 在MS-DOS模式和Batch模式中设置NLS_LANG 注册表中NLS_LANG和系统环 ...
- 【struts2】名为dispatcher的ResultType
1)基本使用 名称为“dispatcher”的ResultType,在struts-default.xml里的配置如下: <result-type name="dispatcher&q ...
- 【Linux】统计命令wc
如果我想要知道 /etc/man.config 这个文件里面有多少字?多少行?多少字符的话, 可以怎么做呢?其实可以利用 wc 这个命令来达成喔!他可以帮我们计算输出的信息的整体数据! [root@w ...
- mysql 创建函数问题
ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declar ...
- 《TCP/IP详解卷1:协议》读书笔记
<TCP/IP详解卷1:协议>读书笔记 - QingLiXueShi - 博客园https://www.cnblogs.com/mengwang024/p/4425834.html < ...
- springcloud中概念辨析
1 什么是微服务? 微服务架构是一种架构模式或者一种架构风格,他提倡将单一应用程序划分成一组小的服务,每个服务运行在独立进程中,服务之间相互协调.相互配合.服务之间采用轻量级的通信机制(一般是基于HT ...
- MySql(十二):MySql架构设计——可扩展设计的基本原则
一.前言 科技在发展,硬件设备的发展渐渐无法满足应用系统对处理能力的要求.不过,我们还是可以通过改造系统的架构体系,提升系统的扩展能力,通过组合多个低处理能力的硬件设备来达到一个高处理能力的系统,也就 ...
- JavaScript权威指南第02章 词法结构
词法结构 2.1字符集 JavaScript 是Unicode字符集编写,差点儿支持地球上全部的语言. 2.1.1区分大写和小写 javascript是区分大写和小写的语言. 2.1.2 空格.换行符 ...
- Recyclerview 出现 java.lang.IndexOutOfBoundsException: Inconsistency detected 异常
使用 RecyclerView 的时候报错 java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view hold ...