Commons fileupload初探

  commons fileupload是当前比较流行和实用的文件上传组件,借助它的帮助,可以轻而易举的实现页面表单文件上传。

 

  一。加入commons fileupload组件依赖

<!-- commons-fileupload dependencies -->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.2.2</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>1.3.2</version>
        </dependency>
 

 

  二。定义一个上传文件属性文件 file.properties

#为上传文件开辟的临时文件夹,用于存放临时文件
file.temp_repository=F://jetty-distribution-7.4.5.v20110725//temp

#上传文件到服务器时,存放上传文件的文件夹
file.upload_repository=F://jetty-distribution-7.4.5.v20110725//upload

#存放上传文件时,如果上传文件的大小大于该数值时,就将上传文件以
#临时文件的形式先存放到临时文件夹下。当进行文件上传时,上传的文
#件并不是直接就写到磁盘上的,而是先存放于内存当中,如果上传文件
#过大,那么内存就会不够用,这时就可以启用临时文件存放的形式。
file.size_threshold=10240

#单次上传时,上传的文件大小的最大值
file.size_max=50000000

#单个文件大小的最大值
file.file_size_max=5000000

#自定义的单次上传文件的最大个数
file.max_file_items_per_request=5

#自定义的上传文件的内容类型
file.allowed_content_type=jpg,gif,txt,zip,jpeg,pdf

 

  三。uploadfile.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:property-placeholder location="classpath:file.properties"/>


    <bean id="diskFileItemFactory" class="org.apache.commons.fileupload.disk.DiskFileItemFactory">
        <property name="repository" value="${file.temp_repository}"/>
        <property name="sizeThreshold" value="${file.size_threshold}"/>
    </bean>

    <bean id="fileUpload" class="org.apache.commons.fileupload.servlet.ServletFileUpload">
        <property name="fileItemFactory" ref="diskFileItemFactory"/>
        <property name="sizeMax" value="${file.size_max}"/>
        <property name="fileSizeMax" value="${file.file_size_max}"/>
    </bean>

    <bean id="fileUploadHelper" class="com.dream.utils.FileUploadHelper">
         <property name="servletFileUpload" ref="fileUpload"/>
        <property name="destination" value="${file.upload_repository}"/>
        <property name="maxFileItemsPerRequest" value="${file.max_file_items_per_request}"/>
    </bean>

</beans>

 

  四。自定义扩展的FileUploadHelper

package com.dream.utils;

import com.dream.exception.OverMaxFileItemsException;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.util.Iterator;
import java.util.List;

/**
 * Created by IntelliJ IDEA.
 * User: Zhong Gang
 * Date: 11-8-16
 * Time: 下午11:09
 */
public class FileUploadHelper {
    private static final Integer DEFAULT_FILEITEMS_MAX_NUMBER = 0;

    private Logger logger = LoggerFactory.getLogger(getClass());

    private ServletFileUpload servletFileUpload;
    private File destination;
    private Integer maxFileItemsPerRequest = DEFAULT_FILEITEMS_MAX_NUMBER;

    public void upload(HttpServletRequest request) throws Exception {
        List<FileItem> fileItems = servletFileUpload.parseRequest(request);
        removeFormFields(request, fileItems);
        int size = fileItems.size();
        if (size > DEFAULT_FILEITEMS_MAX_NUMBER && size > maxFileItemsPerRequest) {
            throw new OverMaxFileItemsException();
        }
        for (FileItem fileItem : fileItems) {
            if (!destination.exists()) {
                destination.mkdir();
            }
            String name = fileItem.getName();
            File file = new File(destination, name);
            fileItem.write(file);
        }
    }

    private void removeFormFields(HttpServletRequest request, List<FileItem> fileItems) {
        Iterator<FileItem> iterator = fileItems.iterator();
        while (iterator.hasNext()) {
            FileItem fileItem = iterator.next();
            if (fileItem.isFormField()) {
                String fieldName = fileItem.getFieldName();
                String fieldValue = fileItem.getString();
                request.setAttribute(fieldName, fieldValue);
                iterator.remove();
            }
        }
    }

    public void setServletFileUpload(ServletFileUpload servletFileUpload) {
        this.servletFileUpload = servletFileUpload;
    }

    public void setDestination(File destination) {
        this.destination = destination;
    }

    public void setMaxFileItemsPerRequest(Integer maxFileItemsPerRequest) {
        this.maxFileItemsPerRequest = maxFileItemsPerRequest;
    }
}

 

  五。上传文件表单


<%--
  Created by IntelliJ IDEA.
  User: ZhongGang
  Date: 11-8-15
  Time: 下午10:34
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title>Photo form</title>
    <link href="/resources/css/main.css" rel="stylesheet" type="text/css" media="screen"/>
</head>
<body>
<div id="wrapper">

    <jsp:include page="../decorator/header.jsp"/>

    <div id="page">
        <div>
            <form:form commandName="photo" enctype="multipart/form-data">
                <table>
                    <tr>
                        <td>Name :</td>
                        <td>
                            <form:input path="name"/>
                        </td>
                    </tr>
                    <tr>
                        <td>
                            Upload file:
                        </td>
                        <td>
                            <input type="file" name="file"/>
                        </td>
                    </tr>
                    <tr>
                        <td>Description :</td>
                        <td>
                            <form:input path="description"/>
                        </td>
                    </tr>
                    <tr>
                        <td colspan="2">
                            <input type="submit" value="Submit"/>
                        </td>
                    </tr>
                </table>
            </form:form>
        </div>
    </div>

    <jsp:include page="../decorator/footer.jsp"/>

</div>
</body>
</html>

 

  附:1.表单提交必须是post方法,并且要加上enctype="multipart/form-data"。

    2.当parseRequest方法处理请求过后,会返回一个FileItem的List,不论是表单上的文件域还是非文件域,都    会封闭成一个FileItem,要想获得非文件域的名称和值,可以使用getFieldName和getString方法。在这里我发

    现,如果使用Spring提供的页面标签来绑定元素,是不起作用的,发现                 以multipart/form-data与application/x-www-form-urlencoded的数据组织形式不一样,造成Spring无 法绑定。

 

  以application/x-www-form-urlencoded形式发送的post数据结构:

  截图1

 

  以multipart/form-data形式发送的post数据结构:

  截图2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值