1. 程式人生 > >Spring框架學習(8)spring mvc上傳下載

Spring框架學習(8)spring mvc上傳下載

class tor XML smart details targe resp imp common

內容源自:spring mvc上傳下載

如下示例:
頁面:
web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
> <servlet> <servlet-name>etoak</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>etoak</servlet-name> <url-pattern>*.do</url-pattern
> </servlet-mapping> <display-name></display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>

etoakk-servlet.xml:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"> <!-- 請求解析器 字符請求解析器 HandlerMapping 字節請求解析器 MultipartResolver CommonsMultipartResolver 當服務器端使用commons-fileupload處理上傳請求時,使用該解析器 StandardServletMultipartResolver 當服務器段使用smartupload處理上傳請求時,使用該解析器 註意:在註冊上傳請求解析器時,該解析器的名字(id)值必須是 : multipartResolver 接口名-首字母小寫 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean> <context:component-scan base-package="com"/> </beans>

FileController.java:

@Controller
public class FileController {

    @RequestMapping("/upload")
    public String upload(User user , 
            HttpServletRequest request)throws Exception{

        MultipartFile myfile = user.getMyfile();

        String filename = myfile.getOriginalFilename();
        String contentType = myfile.getContentType();
        long size = myfile.getSize();

        // 從上傳文件中獲取一個輸入流
        InputStream is = myfile.getInputStream();

        // 定位到file目錄  request.session.ServletContext.getRealPath("/file")
        String path = request.getSession().getServletContext().getRealPath("/file");
        String newFilename = new UUIDGenerator().generate().toString()+
            filename.substring(filename.lastIndexOf("."));
        File file = new File(path+"/"+newFilename);

        OutputStream os = new FileOutputStream(file);

        int len;
        byte[] data = new byte[1024];
        while((len=is.read(data))!=-1)
            os.write(data, 0, len);
        is.close();
        os.close();

        return "redirect:success.jsp";

    }

    @RequestMapping("/download")
    public void download(String filename,HttpServletRequest request,HttpServletResponse response) throws Exception{
        System.out.println("文件名"+filename);
        String path = request.getSession().getServletContext().getRealPath("/file");
        File file = new File(path+"/"+filename);

        response.setContentType("multipart/form-data");
        response.setHeader("content-Disposition", "attachment;filename="+filename);
        InputStream is = new FileInputStream(file);
        OutputStream os = response.getOutputStream();
        int len;
        byte[] data = new byte[1024];
        while((len=is.read(data))!=-1)
            os.write(data, 0, len);
        is.close();
        os.close();
    }
}

User.java:

package com.etoak.bean;

import org.springframework.web.multipart.MultipartFile;

public class User {

    /** myfile  文件
     * spring-mvc如何封裝文件類型對象
     * 
     * struts1 - FormFile
     * struts2 - File String String
     * spring-mvc  -  MultipartFile接口 、 CommonsMultipartFile
     */
    private MultipartFile myfile;

    public MultipartFile getMyfile() {
        return myfile;
    }

    public void setMyfile(MultipartFile myfile) {
        this.myfile = myfile;
    }

}

Spring框架學習(8)spring mvc上傳下載