使用commons-fileupload上传简单实现

原创 2007年10月16日 11:00:00

首先,要使用“commons-fileupload”,必需有“commons-io”包。 

 

import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class Request {

    private Map parameters;// 保存普通form表单域

    private Map fileMap;// 保存文件

    private String encoding = "GBK"; // 字符编码,当读取上传表单的各部分时会用到该encoding

    private long sizeMax = -1;

    private long filesSize = 0; // 所有文件的总大小

    /**
     * @param request
     * @throws UnsupportedEncodingException
     */
    public Request(HttpServletRequest request)
            throws UnsupportedEncodingException {

        this.parameters = new HashMap();

        this.fileMap = new HashMap();

        DiskFileItemFactory factory = new DiskFileItemFactory();

        factory.setSizeThreshold(DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD);

        ServletFileUpload upload = new ServletFileUpload(factory);

        upload.setHeaderEncoding(this.encoding);

        try {
            List items = upload.parseRequest(request);

            for (int i = 0; i < items.size(); i++) {
                FileItem item = (FileItem) items.get(i);
                if (item.isFormField()) {
                    String fieldName = item.getFieldName();
                    String value = item.getString(this.encoding);
                    if (this.parameters.containsKey(fieldName)) {
                        String value1 = (String) this.parameters.get(fieldName);
                        this.parameters.put(fieldName, value1.replace(',', ',')
                                + "," + value.replace(',', ','));
                    } else
                        this.parameters.put(fieldName, value);
                } else {

                    if (!isValidFile(item))
                        continue;

                    this.fileMap.put(item.getFieldName(), item);
                    this.filesSize += item.getSize();
                }
            }

        } catch (FileUploadException e) {
            e.printStackTrace();
        }
    }

    /**
     * 上传文件
     * @param field 字段名
     * @param path 完整文件路径
     * @throws Exception
     */
    public void save(String field, String path) throws Exception {
        if (this.fileMap.isEmpty())
            return;

        if (this.sizeMax > -1 && this.filesSize > this.sizeMax) {
            String message = "the request was rejected because its size "
                    + this.filesSize + " exceeds the configured maximum "
                    + this.sizeMax;

            throw new org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException(
                    message, this.filesSize, this.sizeMax);
        }

        Iterator iter = this.fileMap.keySet().iterator();
        while (iter.hasNext()) {
            Object key = iter.next();
            FileItem item = (FileItem) this.fileMap.get(key);

            if (key.equals(field))
                item.write(new File(path));
        }

    }

    public String getParameter(String key) {
        return (String) this.parameters.get(key);
    }

    public FileItem getFile(String key) {
        return (FileItem) this.fileMap.get(key);
    }

    /**
     * 验证文件是否有效
     * @param item
     * @return
     */
    private boolean isValidFile(FileItem item) {
        return item == null || item.getName() == "" || item.getSize() == 0 ? false
                : true;
    }

}

利用commons-fileupload组件实现文件上传-实例

一、所需要的包: 1、commons-fileupload-1.2.1.jar: 下载地址 http://commons.apache.org/downloads/download_fi...
  • elong490
  • elong490
  • 2014年11月18日 17:45
  • 2667

利用apache的Commons-fileupload和Ajax实现文件上传进度条

实现思路: 1、
  • b671900
  • b671900
  • 2014年09月29日 17:19
  • 2094

JAVAWEB开发之文件的上传与下载(开源组件commons-fileupload的详细使用)

文件上传简介 什么是文件上传?为什么使用文件上传? 文件上传就是将客户端资源,通过网路传递到服务器端。 因为文件数据比较大,必须通过文件上传才可以完成将数据保存到数据库端的操作。 文件上传的本质就是I...
  • u013087513
  • u013087513
  • 2017年02月28日 00:01
  • 3585

commons-fileupload+servlet实现简单文件上传

当我们使用form提交
  • li1441009033
  • li1441009033
  • 2014年08月13日 21:50
  • 313

使用Commons-fileupload组件和jstl实现文件上传

一、文件上传的需要: 1、           选择文件:   2、必须要设置input输入项的name属性,否则浏览器将不会发送上传文件的数据。 3、必须把form的enctype属值设为mult...
  • u011937340
  • u011937340
  • 2013年12月30日 17:45
  • 1311

使用apache commons-fileupload.jar 实现文件上传

使用fileupload 根据你的应用需求,fileupload可以有许多不同的使用方式。在最简单的情况下,你可以调用一个简单的方法来解析servlet请求,然后在他们提 交到你的应用时处理表单...
  • gaoqinqing
  • gaoqinqing
  • 2011年12月28日 16:25
  • 206

Servlet使用commons-fileupload实现文件上传

1.文件上传步骤: step1,在浏览器端,设置表单的提交方式为"post",并且,设置enctype="multipart/form-data"。 step2,在项目中导入commons-fileu...
  • daijin888888
  • daijin888888
  • 2016年04月14日 09:44
  • 685

JSP使用commons-fileupload组件实现文件上传代码示例

这篇文章主要介绍了JSP使用commons-fileupload组件实现文件上传代码示例,具有一定的参考价值,具体内容如下1、准备:将commons-fileupload-1.1.zip和common...
  • xz_src
  • xz_src
  • 2017年07月19日 07:04
  • 331

使用Commons-fileupload组件实现文件上传

文件的上传 一  概念 1.实现web开发中的文件上传功能,需完成如下二个步骤: (1)在web页面中添加上传输入项(jsp页面或html页面) (2)在 servlet中读取上传文件的数据,...
  • hanxiaoshuang321123
  • hanxiaoshuang321123
  • 2011年11月23日 13:36
  • 837

Jsp 使用commons-fileupload实现文件上传

新建javaweb项目FileUpload 使用commons-fileupload时,需要使用commons-io的jar文件。下载commons-iocommons-fileupload的官方下...
  • zhangzhendong7
  • zhangzhendong7
  • 2013年05月02日 16:41
  • 723
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用commons-fileupload上传简单实现
举报原因:
原因补充:

(最多只允许输入30个字)