使用Commons FileUpLoad组件实现文件上传功能

Commons 是Apache开放的源码组织的一个java子项目,该项目主要涉及一些开发中常用的模块,如文件上传,命令行处理,数据库连接池等。FileUpLoad就是其中的一个用于处理HTTP文件上传的子项目。Commons FileUpLoad组建具有以下几个特点:

1.使用简单:Commons FileUpLoad组件可以方便的嵌入JSP文件中,在JSP文件中仅编写少量代码就可完成文件上传功能,十分方便。

2.能够全程控制上传的内容:使用Commons FileUpLoad组件提供的对象及操作方法可以获得全部上传文件的信息,包括文件名称、类型、大小等,方便操作。

3.能够对上传文件的大小、类型进行控制:为了避免在上传过程中出现异常数据,在Commons FileUpload组件中,专门提供了相应的方法用于对上传文件进行控制。

环境准备:

在项目中引入Commons-Fileload-1.2.2.jar和Commons-io-2.4.jar架包

设置表单的enctype属性:

<form  method="post" enctype="multipart/form-data">

在表单中使用Filek控件选择文件:

<input type="file" name="file"/>

注意:上传文件是from标签的method属性必须设成 "post",不能设置为"get"

表单设置好后,就可以通过Commons-FileUpload组件实现上传了,在实现上传之前,首先介绍下该组建的API。

添加完jar架包之后,在JSP文件中还需要将Commons-FileUpload组建所使用的类库导入JSP文件中,代码如下:

<%@ page import="org.apache.commeons.fileupload.*"%>

在项目中添加Commons-FileUpload组件后,再了解该组建都提供了哪些接口和类来实现文件的上传。

ServletFileUpload类的常用方法

public void setSizeMax(long sizeMax)     设置请求信息实体的最大允许的字节数

public List parseRequest(HttpServletRequest req)   解析form表单提交的数据,返回一个FileItem实例的集合

public static final boolean isMultipartContent(HttpServletRequest req)  判断请求信息是否为"multipart/form-data"类型

public void setHeaderEncoding(String encoding)   设置转换时所使用的字符集编码

Fileltem接口

public boolean isFormField()  判断FileItem对象封装的数据类型,普通表单字段返回true,文件表单字段返回false

public String getName()  获得文件上传字段中的文件名,普通表单字段返回null

public String getFieldName()  返回表单字段元素的name值

public void write(File file)  将FileItem对象中保存的主体内容保存到指定的文件中

public String getString()   将FileItem对象中保存的主体内容以一个字符串返回

public long getSize()   返回单个文件上传的字节数

FileltemFactory接口与实现类

public void setSizeThreshold(int sizThreshold)   设置内存缓存区的大小

public void setRepositoryPath(String path)   设置临时文件存放的目录

使用Commons FileUpload组件实现文件上传

from表单代码:

<form action="fileupload/UpLoad" method="post" enctype="multipart/form-data">
       用户名:<input type="text" name="uname"/>
         上传:<input type="file" name="file"/>
    <input type="submit" />
    </form>

Servlet模版中的代码

package fileupload;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.activation.FileDataSource;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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;

public class UpLoad extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request,response);
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {     //乱码处理
        request.setCharacterEncoding("utf-8");
        //上传
        FileItemFactory factory = new DiskFileItemFactory();
        //工具 依赖一个工厂
        ServletFileUpload upload = new ServletFileUpload(factory);
        try {
            //根据请求拆解出一个FileItem集合  一个FileItem对应前台的一个表单字段
            List<FileItem> list = upload.parseRequest(request);
            //一个item就是一个表单字段
            for (FileItem item : list) {
                //普通表单字段
                if(item.isFormField()){
                    if(item.getFieldName().equals("uname")){
                        String uname = item.getString("utf-8");
                        request.setAttribute("uname",uname);
                    }
                }else{
                    //文件域字段
                    String filename = item.getName();
                    //在servlet中获取application对象
                    String leftpath = getServletContext().getRealPath("/WEB-INF/upload");
                    File file = new File(leftpath,filename);
                    item.write(file);
                    System.out.println("write ok!");
                }
            }
        } catch (FileUploadException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

文件上传成功!

需要去安装Tomcat的本地路径去查看上传的文件

时间: 2024-10-14 19:52:50

使用Commons FileUpLoad组件实现文件上传功能的相关文章

Spring MVC使用commons fileupload实现文件上传功能

通过Maven建立Spring MVC项目,引入了Spring相关jar依赖. 1.为了使用commons fileupload组件,需要在pom.xml中添加依赖: <properties> <spring.version>3.0.7.RELEASE </spring.version> <junit.version>3.8.1</junit.version> <fileupload.version>1.2.2</fileupl

使用commons-fileupload-1.2.1.jar等组件实现文件上传

使用的主要jar包:commons-io-1.3.2.jar包;commons-fileupload-1.2.1.jar包:commons-lang-2.3.jar,在使用组件实现文件上传时候要注意前后台的一致性,注意在后台定义File文件对象名要与jsp页面中的file标签name名字一致,前台form标签属性一定要设置为enctype="multipart/form-data",而且传输方式必须是post方式.不然后台不认为提交的是文件类型,而认为是普通表单的提交. 废话不多说看主

用Commons-FileUpload组件实现文件上传

一.用Commons-FileUpload组件实现文件上传 1.导入两个jar包 FileUpload下载地址: http://commons.apache.org/fileupload/ 下载:commons-fileupload-1.2.2-bin.zip    得到:commons-fileupload-1.2.2.jar http://commons.apache.org/io/ 下载:commons-io-1.4-bin.zip       得到:commons-io-1.4.jar

jquery组件WebUploader文件上传用法详解

这篇文章主要为大家详细介绍了jquery组件WebUploader文件上传用法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件,下文来为各位演示一下关于jquery WebUploader文件上传组件的用法. 使用WebUploader还可以批量上传文件.支持缩略图等等众多参数选项可设置,以及多个事件方法可调用,你可以随心所欲的定制你要的上传组件. 接下来我以图片上

jsp实现文件上传(二)用cos组件实现文件上传

jsp表单 <%@ page language="java" pageEncoding="utf-8"%> <html> <head> <title>My JSP 'index.jsp' starting page</title> </head> <body> <form action="cos.jsp" method="post" en

iview Upload组件多文件上传,以及vue文件下载

iview Upload组件多文件上传 系统经常遇到文件上传的问题,iview提供了Upload组建,能够很好的实现文件上传,当然一次上传多个文件也是允许的. 思路:创建一个数组 把需要上传的文件 push到这个数组里面 1.引用组件 2.手动上传,根据官方文档 设置:before-upload ="handleUpload"等于false (1).:before-upload 是 iview Upload 上传组件的一个属性 设置返回值为 false 可以阻止默认上传方式(自动上传模

如何在Web页面中集成文件上传功能

当前,个人主页制作非常流行.当用户开发好自己的页面时,需要将文件传输到服务器上,解决这个问题的方法之一 是运行FTP服务器并将每个用户的FTP默认目录设为用户的Web主目录,这样用户就能运行FTP客户程序并上传文件到指定的 Web目录.由于Windows NT 和 Windows98均不提供直接的基于窗口形式的FTP客户程序,用户必须懂得如何使用基于命令行 的FTP客户,或掌握一种新的基于窗口形式的FTP客户程序.因此,这种解决方案仅对熟悉FTP且富有经验的用户来说是可行 的. 如果我们能把文件

nodejs 实现简单的文件上传功能

首先需要大家看一下目录结构,然后开始一点开始我们的小demo. 文件上传总计分为三种方式: 1.通过flash,activeX等第三方插件实现文件上传功能. 2.通过html的form标签实现文件上传功能,优点:浏览器兼容好. 3.通过xhr level2的异步请求,可以百度formData对象. 这里使用2做个练习. node插件请看下package.json文件 { "name": "upload", "version": "0.1

配置php.ini实现PHP文件上传功能

本文介绍了如何配置php.ini实现PHP文件上传功能.其中涉及到php.ini配置文件中的upload_tmp_dir.upload_max_filesize.post_max_size等选项,这些选项是文件上传成败的关键.我们以php.5.3.5的Windows版本为例说明. php.ini中文件上传功能配置选项说明 用文本工具(推荐EditPlus)打开php.ini 配置文件,查找 File Uploads ,在这个区域有以下3个选项: file_uploads = On 是否允许HTT