Spring Mvc + html5 多文件上传

1、mvcConfig.xml配置
    <!-- 文件上传 -->
    <bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="utf-8"></property>
        <property name="maxUploadSize" value="10485760"></property>
        <property name="maxInMemorySize" value="40960"></property>
    </bean>
    
2、/Servers/Tomcat v7.0 Server at localhost-config/server.xml(这个配置文件是在http服务器上的,这个可以按照需要配置,主要是配置一个映射的地址)

<Context docBase="D:\picture" path="/pic_coupon" reloadable="true"/>

docBase是服务器中保存文件的物理地址,path是网络的映射地址。

3、jar包
文件上传
com.springsource.org.apache.commons.fileupload-1.2.0.jar

com.springsource.org.apache.commons.io-1.4.0.jar


4、index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>文件上传</title>

<script type="text/javascript">
      function doUpload(e){
          var f = document.getElementById("file").files;
          //遍历出选择的所有文件名称
          for(var i = 0; i < f.length; i++){
              //alert(f[i].name);
          }
          form.submit();
      }
</script>

</head>
<body>
    <form name="form" action="${pageContext.request.contextPath}/upload/upload.do" method="post" enctype="multipart/form-data">
                请选择要上传的文件:<br>
                      <input type="file" id="file" name="file" multiple="multiple" /><br>
                      (最大10M)<br>
                      <input type="text" name="test" value="test"><br>
                     <!--  
                        <input type="button" οnclick="doUpload(this)" value='提交'>
                        -->
                        <input type="submit" value="提交"> <input type="reset" value="重设">
    </form>
</body>
</html>


5、控制层文件UploadController.java

package com.******.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.shareboxes.util.FileUpload;

@Controller
@RequestMapping("/upload")
public class UploadController {
    
    @RequestMapping(value = "upload.do", produces = "text/json;charset=UTF-8", method = { RequestMethod.GET, RequestMethod.POST })
    public @ResponseBody String upload(String test, HttpServletRequest request, HttpServletResponse response){
        System.out.println("########################:"+test);
        return FileUpload.userCouponUpload(request);
    }

}

6、上传工具java

FileUpload.java


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

import javax.servlet.http.HttpServletRequest;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;


/**
 * @ClassName: FileUpload
 * @Description:处理上传图片的工具类
 * @author lucc
 * @date 2015年9月28日
 * @version 1.0
 */
public class FileUpload {
    
    private static String mapper_url = "http://localhost:8080/pic_coupon/";
    private static String physics_url = "D:\\picture\\";

    @SuppressWarnings("null")
    public static String userCouponUpload(HttpServletRequest request) {
        String web_url ="";
        try {
            CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
            // 判断 request 是否有文件上传,即多部分请求
            if (multipartResolver.isMultipart(request)) {
                // 转换成多部分request
                MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
                // 取得request中的所有文件名
                List<MultipartFile> fileList = multiRequest.getFiles("file");
                System.out.println("当前上传的文件个数为:" + fileList.size());
                for (MultipartFile file : fileList) {
                    // 记录上传过程起始时的时间,用来计算上传时间
                    int pre = (int) System.currentTimeMillis();
                    // 取得上传文件
                    //MultipartFile file = multiRequest.getFile(iter.next());
                    if (file != null || !file.isEmpty()) {
                        // 取得当前上传文件的文件名称
                        String myFileName = file.getOriginalFilename();
                        System.out.println("当前上传文件的文件名称------>"+myFileName);
                        // 如果名称不为"",说明该文件存在,否则说明该文件不存在
                        if (myFileName.trim() != "") {
                            System.out.println(myFileName);
                            // 定义上传路径(图片存储的物理地址)
                            //当前时间的毫秒
                            long time = DateUtil.getStatic();
                            String localfileName = physics_url+time+myFileName;
                            System.out.println("图片存储的物理地址------>"+localfileName);
                            
                            File localFile = new File(localfileName);
                            //判断该文件是否存在
                            if(!localFile.exists()){
                                localFile.mkdirs();
                            }
                            //上传图片
                            file.transferTo(localFile);
                            web_url = mapper_url+time+myFileName;
                            System.out.println("网络地址--->" + web_url);
                        }
                    }
                    // 记录上传该文件后的时间
                    int finaltime = (int) System.currentTimeMillis();
                    System.out.println("图片上传时间--->"+ (finaltime - pre) + "ms");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            return "error";
        }
        return "success";
    }
}


辅助工具类
DateUtil.java

import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;

/**
 * @ClassName: dateUtil
 * @Description:日期处理工具类
 * @author lucc
 * @date 2015年11月13日
 * @vesion 1.0
 */
public class DateUtil {

    private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    
    private static SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd 00:00:00");

    /**
     *
     * @Title: dateToString
     * @Description: TODO(日期转字符串)
     * @param date
     * @return
     * @return String
     */
    public static String dateToString(Date date) {
        return sdf.format(date);
    }

    /**
     *
     * @Title: stringToDate
     * @Description: TODO(字符串转日期)
     * @param str
     * @return
     * @return Date
     */
    public static Date stringToDate(String str) {
        Date date = null;
        try {
            date = sdf.parse(str);
            return date;
        } catch (ParseException e) {
            e.printStackTrace();
            return date;
        }
    }

    /**
     *
     * @Title: getStatic
     * @Description: TODO(得到当前时间的毫秒数)
     * @return
     * @return long
     */
    public static long getStatic() {
        Date date = new Date();
        return date.getTime();
    }

    /**
     *
     * @Title: getTime
     * @Description: TODO(返回当前时间)
     * @return
     * @return String
     */
    public static String getTime() {
        Date date = new Date();
        return dateToString(date);
    }
    
    /**
     *
     * @Title: getDateTime
     * @Description: TODO(返回当前只有年月日的时间)
     * @return
     * @return String
     */
    public static String getDateTime() {
        Date date = new Date();
        return sdfDate.format(date);
    }
    
    /**
     *
     * @Title: getNouseDate
     * @Description: TODO(返回当前时间)
     * @return
     * @return Timestamp
     */
    public static Timestamp getStringToTimestamp(String date) {
        //Timestamp nousedate = new Timestamp();
        return Timestamp.valueOf(date);
    }
    
    /**
     *
     * @Title: getNouseDate
     * @Description: TODO(返回当前时间)
     * @return
     * @return Timestamp
     */
    public static Timestamp getNouseDate() {
        Date date = new Date();
        Timestamp nousedate = new Timestamp(date.getTime());
        return nousedate;
    }
    
    /**
      * 计算两个日期的时间差
      * @param formatTime1
      * @param formatTime2
      * @return
      */
     public static String getTimeDifference(Timestamp formatTime1, Timestamp formatTime2) {
            SimpleDateFormat timeformat = new SimpleDateFormat("yyyy-MM-dd,HH:mm:ss");
            long t1 = 0L;
            long t2 = 0L;
            try {
                t1 = timeformat.parse(getTimeStampNumberFormat(formatTime1)).getTime();
            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            try {
                t2 = timeformat.parse(getTimeStampNumberFormat(formatTime2)).getTime();
            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            //因为t1-t2得到的是毫秒级,所以要初3600000得出小时.算天数或秒同理
            int hours=(int) ((t1 - t2)/3600000);
            int minutes=(int) (((t1 - t2)/1000-hours*3600)/60);
            int second=(int) ((t1 - t2)/1000-hours*3600-minutes*60);
            return ""+hours+"小时"+minutes+"分"+second+"秒";
        }
    
     /**
      * 格式化时间
      * Locale是设置语言敏感操作
      * @param formatTime
      * @return
      */
     public static String getTimeStampNumberFormat(Timestamp formatTime) {
            SimpleDateFormat m_format = new SimpleDateFormat("yyyy-MM-dd,HH:mm:ss", new Locale("zh", "cn"));
            return m_format.format(formatTime);
        }

    /**
     *
     * @Title: getMonth
     * @Description: TODO(获取月份)
     * @param calendar
     * @return
     * @return int
     */
    public static int getMonth(Calendar calendar) {
        if (calendar != null) {
            return calendar.get(Calendar.MONTH);
        } else {
            return Calendar.getInstance().get(Calendar.MONTH);
        }
    }

    /**
     *
     * @Title: getYear
     * @Description: TODO(获取日份)
     * @param calendar
     * @return
     * @return int
     */
    public static int getDate(Calendar calendar) {
        if (calendar != null) {
            return calendar.get(Calendar.DATE);
        } else {
            return Calendar.getInstance().get(Calendar.DATE);
        }
    }

    /**
     *
     * @Title: getYear
     * @Description: TODO(获取年份)
     * @param calendar
     * @return
     * @return int
     */
    public static int getYear(Calendar calendar) {
        if (calendar != null) {
            return calendar.get(Calendar.YEAR);
        } else {
            return Calendar.getInstance().get(Calendar.YEAR);
        }
    }

    /**
     *
     * @Title: DateToCalendar
     * @Description: TODO(Date类型转换到Calendar类型)
     * @param date
     * @return
     * @return Calendar
     */
    public static Calendar DateToCalendar(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar;
    }

    /**
     *
     * @Title: CalendarToDate
     * @Description: TODO(Calendar类型转换到Date类型)
     * @param calendar
     * @return
     * @return Date
     */
    public static Date CalendarToDate(Calendar calendar) {
        return calendar.getTime();
    }
    
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值