package com.xiangshuai.controller;

import java.io.File;
import java.io.IOException;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

/***
 * 
 * @author xiangshuai
 * springmvc 单和多文件上传
 * 所需额外JAR 包 : commons-fileupload-1.2.2.jar 和  commons-io-1.3.2.jar
 * dispatcherServlet-servlet.xml 中需配置如下bean:
 *     <!-- 配置MultipartResolver 用于文件上传 使用spring的CommosMultipartResolver -->
  <bean id="multipartResolver"  
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
        <!-- 上传文件大小上限,单位为字节(10MB) -->
        <property name="maxUploadSize">  
            <value>10485760</value>  
        </property>  
        <!-- 请求的编码格式,必须和jSP的pageEncoding属性一致,以便正确读取表单的内容,默认为ISO-8859-1 -->
        <property name="defaultEncoding">
            <value>UTF-8</value>
        </property>
    </bean>
 * 项目所在地: E:\学习文档子目录压缩\框架\springmvc\文件上传\springmvc2.zip 和
 * 我的网盘\我的笔记\学习文档子目录压缩\框架\springmvc\文件上传\springmvc2.zip
 */
@Controller
@RequestMapping("/upLoad")
public class FileUpload {
    @RequestMapping("/dFileLoad")
    //用 MultipartFile 来接受上传的文件
    public String dFileLoad(@RequestParam("dUploadFile") MultipartFile file,HttpServletRequest request){
        try {
            if(file.getSize()>0){
                String filename = file.getOriginalFilename();
                //限制文件上传的类型
                if(filename.endsWith("jpg")||filename.endsWith(".doc")||filename.endsWith(".docx")){
                    File dir = new File("D:"+File.separatorChar+"temp");
                    if(!dir.exists()){
                        dir.mkdir();
                    }
                    System.out.println(dir.getAbsolutePath());
                    File mbfile= new File(dir.getAbsolutePath()+File.separatorChar+filename);
                    //将 file 复制给 mbfile
                    file.transferTo(mbfile);
                }else {
                    request.setAttribute("filename", file.getOriginalFilename());
                    request.setAttribute("message1", "文件必须以 jpg或doc或docx开头");
                    return "fileNull";
                }
            }else{
                request.setAttribute("filename", file.getOriginalFilename());
                return "fileNull";
            }
            
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
         return "model";
    } 
    /**
     * 
     * @param loginName  : 用来创建在temp目录下 的子目录名 
     * @param files  :接受文件数组
     * @param request
     * @return
     */
    @RequestMapping("/duoFilesLoad")
    //用 MultipartFile[]  来接受上传的多个文件
    public String duoFilesLoade(@RequestParam("loginName") String loginName,@RequestParam("dUploadFile") MultipartFile[] files,HttpServletRequest request){
        try {
                File dir = new File("D:"+File.separatorChar+"temp"+File.separatorChar+loginName);
                if(!dir.exists()){
                    dir.mkdirs();
                }
                boolean flag=true;
                for (int i=0;i<files.length; i++) {
                    MultipartFile file=files[i];
                    String filename = file.getOriginalFilename();
                    if(filename!=null && !"".equals(filename.trim())){
                        flag=false;
                        if(filename.endsWith("jpg")||filename.endsWith(".doc")||filename.endsWith(".docx")){
                            System.out.println(dir.getAbsolutePath());
                            File mbfile= new File(dir.getAbsolutePath()+File.separatorChar+filename);
                            //将 file 复制给 mbfile
                            file.transferTo(mbfile);
                        }else {
                            request.setAttribute("filename", file.getOriginalFilename());
                            request.setAttribute("message1", "文件必须以 jpg或doc或docx开头");
                            return "fileNull";
                        }
                    }
                    
                }
                // 如果一个文件也没有上传
                if(flag){
                    return "fileNull";
                }
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return "model";
    } 
}
 

10-05 14:35