springMVC上传下载

1. springmvc.xml必须配置:

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" p:defaultEncoding="utf-8"/> 

2. WEB-INF/lib下必加入:

commons-fileupload.jar与commons-io-1.4.jar二个文件 

3. 表单属性为:

enctype="multipart/form-data" 

工程项目图片如下:

 

4. 具体代码如下:

 

  FileUploadBean.java       

 

public class FileUploadBean { 

         private byte[] file;

         public void setFile(byte[] file) {
                   this.file = file;
         }
         public byte[] getFile() {
                   return file;
         }
}
package net.liuzd.web;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.BindException;
import java.util.ArrayList;

import java.util.List;
import java.util.Map;

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

import org.springframework.stereotype.Controller;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import org.springframework.web.servlet.ModelAndView;

/**
 * Title: Description: Copyright: Copyright (c) 2011
 * Company:http://liuzidong.iteye.com/ Makedate:2011-5-27 下午01:52:17
 * 
 * @author liuzidong
 * @version 1.0
 * @since 1.0
 * 
 */
@Controller
public class FileUploadController {

    @RequestMapping(value = "/upload", method = RequestMethod.POST)
    public ModelAndView onSubmit(HttpServletRequest request,
            HttpServletResponse response, BindException errors)
            throws Exception {

        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
        CommonsMultipartFile file = (CommonsMultipartFile) multipartRequest
                .getFile("file");

        String name = multipartRequest.getParameter("name");
        System.out.println("name: " + name);
        // 获得文件名:
        String realFileName = file.getOriginalFilename();
        System.out.println("获得文件名:" + realFileName);
        // 获取路径
        String ctxPath = request.getSession().getServletContext().getRealPath(
                "/")
                + "images/";
        // 创建文件
        File dirPath = new File(ctxPath);
        if (!dirPath.exists()) {
            dirPath.mkdir();
        }
        File uploadFile = new File(ctxPath + realFileName);
        FileCopyUtils.copy(file.getBytes(), uploadFile);
        request.setAttribute("files", loadFiles(request));
        return new ModelAndView("success");
    }

    @RequestMapping(value = "/upload2", method = RequestMethod.POST)
    public ModelAndView onSubmit2(HttpServletRequest request,
            HttpServletResponse response, BindException errors)
            throws Exception {

        // 转型为MultipartHttpRequest
        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
        // 根据前台的name名称得到上传的文件
        MultipartFile file = multipartRequest.getFile("file");
        // 获得文件名:
        String realFileName = file.getOriginalFilename();
        // 获取路径
        String ctxPath = request.getSession().getServletContext().getRealPath(
                "/")
                + "\\" + "images\\";
        // 创建文件
        File dirPath = new File(ctxPath);
        if (!dirPath.exists()) {
            dirPath.mkdir();
        }
        File uploadFile = new File(ctxPath + realFileName);
        FileCopyUtils.copy(file.getBytes(), uploadFile);
        request.setAttribute("files", loadFiles(request));
        return new ModelAndView("success");
    }

    @RequestMapping(value = "/upload3", method = RequestMethod.POST)
    public String upload(@RequestParam("file")
    MultipartFile image, HttpServletRequest request) throws IOException {

        String ctxPath = request.getSession().getServletContext().getRealPath(
                "/")
                + "\\" + "images\\";
        System.out.println("路径:" + ctxPath);
        File file = new File(ctxPath + "/" + image.getOriginalFilename());
        // FileCopyUtils.copy(image.getBytes(),new
        // File(ctxPath+"/"+image.getOriginalFilename()));
        try {
            image.transferTo(file); // 保存上传的文件
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        request.setAttribute("files", loadFiles(request));
        return "success";
    }

    // 多文件上传
    @RequestMapping(value = "/upload4", method = RequestMethod.POST)
    public ModelAndView fileUpload(HttpServletRequest request,
            HttpServletResponse response, BindException errors)
            throws Exception {

        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
        String ctxPath = request.getSession().getServletContext().getRealPath(
                "/")
                + "\\" + "images\\";

        File file = new File(ctxPath);
        if (!file.exists()) {
            file.mkdir();
        }
        String fileName = null;
        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
            // 上传文件名
            // System.out.println("key: " + entity.getKey());
            MultipartFile mf = entity.getValue();
            fileName = mf.getOriginalFilename();
            File uploadFile = new File(ctxPath + fileName);
            FileCopyUtils.copy(mf.getBytes(), uploadFile);
        }
        request.setAttribute("files", loadFiles(request));
        return new ModelAndView("success");
    }

    // @ModelAttribute("files")//此属性用于初始类时调用,但上传文件后不能时时反应上传文件个数,不适合动态数据
    public List<String> loadFiles(HttpServletRequest request) {
        List<String> files = new ArrayList<String>();
        String ctxPath = request.getSession().getServletContext().getRealPath(
                "/")
                + "\\" + "images\\";
        File file = new File(ctxPath);
        if (file.exists()) {
            File[] fs = file.listFiles();
            String fname = null;
            for (File f : fs) {
                fname = f.getName();
                if (f.isFile()) {
                    files.add(fname);
                }
            }
        }
        return files;
    }

    @RequestMapping("/download/{fileName}")
    public ModelAndView download(@PathVariable("fileName")
    String fileName, HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        response.setContentType("text/html;charset=utf-8");
        request.setCharacterEncoding("UTF-8");
        java.io.BufferedInputStream bis = null;
        java.io.BufferedOutputStream bos = null;

        String ctxPath = request.getSession().getServletContext().getRealPath(
                "/")
                + "\\" + "images\\";
        String downLoadPath = ctxPath + fileName;
        System.out.println(downLoadPath);
        try {
            long fileLength = new File(downLoadPath).length();
            response.setContentType("application/x-msdownload;");
            response.setHeader("Content-disposition", "attachment; filename="
                    + new String(fileName.getBytes("utf-8"), "ISO8859-1"));
            response.setHeader("Content-Length", String.valueOf(fileLength));
            bis = new BufferedInputStream(new FileInputStream(downLoadPath));
            bos = new BufferedOutputStream(response.getOutputStream());
            byte[] buff = new byte[2048];
            int bytesRead;
            while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
                bos.write(buff, 0, bytesRead);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (bis != null)
                bis.close();
            if (bos != null)
                bos.close();
        }
        return null;
    }
}

5. spring.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:p="http://www.springframework.org/schema/p"
    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">
    <!-- 
        自动搜索@Controller标注的类
        用于指明系统从哪个路径下寻找controller,然后提前初始化这些对象。
    -->
    <context:component-scan base-package="net.liuzd.web" />

    <!--  ③:对模型视图名称的解析,即在模型视图名称添加前后缀 -->
    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver"
        p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />

   
    <bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver" p:defaultEncoding="utf-8">
        <property name="maxUploadSize">
            <value>104857600</value>
        </property>
        <property name="maxInMemorySize">
            <value>4096</value>
        </property>
    </bean>
</beans>

6. success.jsp

<%@ taglib  prefix="c" uri="/WEB-INF/c.tld"%>
<h1>Upload Successful</h1>
    <c:forEach var="month" items="${files}">
        <li><a href="${pageContext.request.contextPath}/download/${month}.do">${month}</a></li>
    </c:forEach>
  <hr><br>
  <a href="${pageContext.request.contextPath}/index.jsp">返回</a>

7. web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    
    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/classes/log4j.properties</param-value>
    </context-param>

    <context-param>
        <param-name>log4jRefreshInterval</param-name>
        <param-value>60000</param-value>
    </context-param>
    <context-param>
        <param-name>log4jExposeWebAppRoot</param-name>
        <param-value>false</param-value>
    </context-param>

    <listener>
        <listener-class>
            org.springframework.web.util.Log4jConfigListener
        </listener-class>
    </listener>

    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>
            org.springframework.web.filter.CharacterEncodingFilter
        </filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>false</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>*.do</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>*.jsp</url-pattern>
    </filter-mapping>

    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

 

posted @ 2013-04-23 00:37  horizon~~~  阅读(334)  评论(1编辑  收藏  举报