SpringMVC文件上傳實現

文件上傳的必要前提:
    1.form表單的enctype取值必須是:multipart/form-data(默認值是:application/x-www-form-urlencoded)
enctype:是表單請求正文的類型
    2.method屬性取值必須是Post
    3.提供一個文件選擇域
    藉助第三方組件實現:
    需要導入的jar包:

<dependency>
     <groupId>commons-fileupload</groupId>
     <artifactId>commons-fileupload</artifactId>
     <version>1.3.1</version>
</dependency>
<dependency>
     <groupId>commons-io</groupId>
     <artifactId>commons-io</artifactId>
     <version>2.4</version>
</dependency>

    主要的jsp頁面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h3>傳統方式文件上傳</h3>
<form action="user/fileUpload" method="post" enctype="multipart/form-data">
    選擇文件:<input type="file" name="upload"/><br/>
    <input type="submit" value="上傳"/>
</form>
<h3>springmvc方式文件上傳</h3>
<form action="user/fileUpload2" method="post" enctype="multipart/form-data">
    選擇文件:<input type="file" name="upload"/><br/>
    <input type="submit" value="上傳"/>
</form>
<h3>跨服務器方式文件上傳</h3>
<form action="user/fileUpload3" method="post" enctype="multipart/form-data">
    選擇文件:<input type="file" name="upload"/><br/>
    <input type="submit" value="上傳"/>
</form>
</body>
</html>
一、傳統文件上傳方式

    1.導入文件上傳的jar包

<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.2</version>
</dependency>
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
</dependency>

    2.編寫控制器方法

@RequestMapping("/fileUpload")
    public String fileUpload(HttpServletRequest request) throws Exception {
        System.out.println("文件上傳");
        //上傳的位置
        String path = request.getSession().getServletContext().getRealPath("/uploads/");
        //判斷是否存在
        File file = new File(path);
        if (!file.exists()){
            //創建該文件夾
            file.mkdirs();
        }
        //解析request對象,並獲取上傳文件項
        DiskFileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);
        //解析request
        List<FileItem> items = upload.parseRequest(request);
        for (FileItem item : items) {
            if (item.isFormField()){
                //普通表單項
            }else {
                //上傳文件項
                //獲取文件名
                String name = item.getName();
                //把文件名設置爲唯一值,uuid
                String uuid = UUID.randomUUID().toString().replace("-", "");
                name = uuid+"_"+name;
                //完成文件上傳
                item.write(new File(path,name));
                //刪除臨時文件
                item.delete();
            }
        }
        return "success";
    }
}
二、Springmvc方式文件上傳

    Springmvc框架提供了MultipartFile對象,該對象表示上傳的文件,要求變量名稱必須和表單file標籤的nam屬性名稱相同
    1.springmvc.xml中配置文件解析器

<!--配置文件解析器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="10485760"></property>
</bean>

    2.編寫控制器方法

@RequestMapping("/fileUpload2")
public String fileUpload2(HttpServletRequest request, MultipartFile upload) throws Exception {
    System.out.println("springmvc文件上傳");
    //上傳的位置
    String path = request.getSession().getServletContext().getRealPath("/uploads/");
    //判斷是否存在
    File file = new File(path);
    if (!file.exists()){
        //創建該文件夾
        file.mkdirs();
    }
    //上傳文件項
    //獲取文件名
    String name = upload.getOriginalFilename();
    //把文件名設置爲唯一值,uuid
    String uuid = UUID.randomUUID().toString().replace("-", "");
    name = uuid+"_"+name;
    //完成文件上傳
    upload.transferTo(new File(path,name));
    return "success";
}
三、SpringMVC跨服務器方式文件上傳

    1.搭建兩個tomcat服務器
    2.導入需要的jar包

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-core</artifactId>
    <version>1.18.1</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-client</artifactId>
    <version>1.18.1</version>
</dependency>

    3.編寫控制器方法

@RequestMapping("/fileUpload3")
public String fileUpload3(MultipartFile upload) throws Exception {
    System.out.println("跨服務器文件上傳");
    //定義上傳文件服務器路徑
    String path = "http://localhost:9090/uploads/";
    //上傳文件項
    //獲取文件名
    String name = upload.getOriginalFilename();
    //把文件名設置爲唯一值,uuid
    String uuid = UUID.randomUUID().toString().replaceAll("-", "");
    name = uuid+"_"+name;
    //創建客戶端對象
    Client client = Client.create();
    //和服務器連接
    WebResource webResource = client.resource(path+name);
    //文件上傳
    webResource.put(upload.getBytes());
    return "success";
}
發佈了24 篇原創文章 · 獲贊 4 · 訪問量 777
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章