最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring MVC多種情況下進(jìn)行文件上傳的實(shí)例

 更新時(shí)間:2024年02月04日 11:22:13   作者:會(huì)洗碗的CV工程師  
上傳是Web工程中很常見(jiàn)的功能,SpringMVC框架簡(jiǎn)化了文件上傳的代碼,本文給大家總結(jié)了Spring MVC多種情況下進(jìn)行文件上傳的實(shí)例,并通過(guò)代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下

一、原生方式上傳

上傳是Web工程中很常見(jiàn)的功能,SpringMVC框架簡(jiǎn)化了文件上傳的代碼,我們首先使用JAVAEE原生方式上傳文件來(lái)進(jìn)行詳細(xì)描述:

1.1 修改web.xml項(xiàng)目版本

這里我們創(chuàng)建新的SpringMVC模塊,在web.xml中將項(xiàng)目從2.3改為3.1,即可默認(rèn)開(kāi)啟el表達(dá)式,如下圖:

1.2 上傳JSP頁(yè)面

那這里我們需要訪問(wèn)一個(gè)頁(yè)面來(lái)進(jìn)行文件下載

upload.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>上傳</title>
</head>
<body>
    <h3>文件上傳</h3>
    <%-- 上傳表單的提交方式必須是post --%>
    <%-- enctype屬性為multipart/from-data,意思是不對(duì)表單數(shù)據(jù)進(jìn)行編碼 --%>
    <form action="/fileUpload" method="post" enctype="multipart/form-data">
        <%-- 文件選擇控件,類型是file,必須要有name屬性 --%>
        選擇文件:<input type="file" name="upload"/>
        <input type="submit" value="上傳">
    </form>
</body>
</html>

1.3 引入文件上傳依賴

接下來(lái)需要分析請(qǐng)求體中的文件項(xiàng),并將數(shù)據(jù)寫入磁盤,此時(shí)需要借助文件上傳工具

    <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>

1.4 分析控制器執(zhí)行流程

編寫控制器接收上傳請(qǐng)求,控制器進(jìn)行三步操作:

  • 創(chuàng)建文件夾,存放上傳文件。
  • 分析請(qǐng)求體,找到上傳文件數(shù)據(jù)。
  • 將文件數(shù)據(jù)寫入文件夾。

完整文件上傳控制器代碼如下:

package com.example.controller;
 
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
 
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.util.List;
import java.util.UUID;
 
@Controller
public class UploadController {
 
    @RequestMapping("/fileUpload")
    public String upload(HttpServletRequest request) throws Exception{
        // 創(chuàng)建文件夾,存放上傳文件
        // 1.設(shè)置上傳文件夾的真實(shí)路徑
        String realpath = request.getSession().getServletContext().getRealPath("/upload");
 
        System.out.println(realpath);
        // 2.判斷目錄是否存在,如果不存在,創(chuàng)建該目錄
        File file = new File(realpath);
        if(!file.exists()){
            file.mkdirs();
        }
 
        // 分析請(qǐng)求體,找到上傳文件數(shù)據(jù)
        // 1.創(chuàng)建磁盤文件工廠
        DiskFileItemFactory factory = new DiskFileItemFactory();
        // 2.創(chuàng)建上傳數(shù)據(jù)分析器對(duì)象
        ServletFileUpload servletFileUpload = new ServletFileUpload(factory);
        // 3.利用分析器對(duì)象解析請(qǐng)求體,返回所有數(shù)據(jù)項(xiàng)
        List<FileItem> fileItems = servletFileUpload.parseRequest(request);
        // 遍歷所有數(shù)據(jù),找到文件項(xiàng)(非表單項(xiàng))
        for(FileItem fileItem:fileItems){
            if(!fileItem.isFormField()){
                // 將文件數(shù)據(jù)寫進(jìn)文件夾
                // 1.獲取文件名
                String name = fileItem.getName();
                // 2.將文件寫入磁盤
                fileItem.write(new File(file,name));
                System.out.println(file.getAbsoluteFile());
                // 3.刪除內(nèi)存中的臨時(shí)文件
                fileItem.delete();
            }
        }
        return "index";
    }
}

文件成功下載后跳轉(zhuǎn)到默認(rèn)頁(yè)面。 

1.5 測(cè)試結(jié)果

訪問(wèn)路徑:http://localhost:8080/upload.jsp

點(diǎn)擊選擇文件,選擇要上傳的文件,然后點(diǎn)擊上傳。

OK,可以得到webapp目錄下面多了一個(gè)文件夾upload,并且里面有我們剛剛上傳的文件。 可以看得出來(lái)用原生的方式來(lái)完成文件上傳是比較麻煩的,接下來(lái)我們看一下用Spring MVC方式如何來(lái)進(jìn)行文件上傳

二、Spring MVC 方式上傳

SpringMVC使用框架提供的文件解析器對(duì)象,可以直接將請(qǐng)求體中的文件數(shù)據(jù)轉(zhuǎn)為MultipartFile對(duì)象,從而省略原生上傳中分析請(qǐng)求體的步驟。

2.1 配置文件解析器

<!-- 文件解析器對(duì)象,id名稱必須是multipartResolver -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 支持一次上傳文件的總?cè)萘?。單位:字?jié)100M = 100*1024*1024 -->
        <property name="maxUploadSize" value="104857600"/>
        <!-- 文件名的編碼方式 -->
        <property name="defaultEncoding" value="utf-8"/>
    </bean>

2.2  創(chuàng)建JSP表單

upload2,.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>上傳</title>
</head>
<body>
<h3>文件上傳</h3>
<%-- 上傳表單的提交方式必須是post --%>
<%-- enctype屬性為multipart/from-data,意思是不對(duì)表單數(shù)據(jù)進(jìn)行編碼 --%>
<form action="/fileUpload2" method="post" enctype="multipart/form-data">
    <%-- 文件選擇控件,類型是file,必須要有name屬性 --%>
        選擇文件:<input type="file" name="file">
        <input type="submit" value="上傳">
</form>
</body>
</html>

 其實(shí)這個(gè)JSP和上面那個(gè)沒(méi)什么區(qū)別,只是響應(yīng)處理的路徑不同,為了避免重復(fù)開(kāi)關(guān)tomcat,因?yàn)榫投嗑帉懥艘粋€(gè)表單。

2.3 控制器方法

// MultipartFile參數(shù)名必須和JSP文件空間的name屬性一致
    @RequestMapping("/fileUpload2")
    public String upload2(MultipartFile file,HttpServletRequest request) throws Exception{
        // 創(chuàng)建文件夾,存放上傳文件
        String realpath = request.getSession().getServletContext().getRealPath("/upload");
        File dir = new File(realpath);
        if(!dir.exists()){
            dir.mkdirs();
        }
 
        // 將上傳的數(shù)據(jù)寫到文件夾的文件中
        // 1.拿到上傳的文件名
        String filename = file.getOriginalFilename();
        filename = UUID.randomUUID()+"_"+filename;
        // 2.創(chuàng)建空文件
        File newFile = new File(dir,filename);
        // 3.將數(shù)據(jù)寫入空文件中
        file.transferTo(newFile);
        return "index";
    }

Ok,可以看到這個(gè)比上面那個(gè)簡(jiǎn)單許多,只需要參數(shù)名和表單的name屬性一致便可以自動(dòng)匹配。

2.4 測(cè)試結(jié)果

OK,訪問(wèn)路徑:http://localhost:8080/upload2.jsp 

看到如下圖,我們是成功上傳了呢

三、上傳多文件

SpringMVC支持一次性上傳多個(gè)文件,寫法如下:

3.1 JSP頁(yè)面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>上傳</title>
</head>
<body>
<h3>文件上傳</h3>
<%-- 上傳表單的提交方式必須是post --%>
<%-- enctype屬性為multipart/from-data,意思是不對(duì)表單數(shù)據(jù)進(jìn)行編碼 --%>
<form action="/fileUpload3" method="post" enctype="multipart/form-data">
    <%-- 文件選擇控件,類型是file,必須要有name屬性 --%>
    用戶名:<input name="username"/><br/>
    文件1:<input type="file" name="files"><br/>
    文件2:<input type="file" name="files"><br/>
    <input type="submit" value="上傳">
</form>
</body>
</html>

3.2 控制器方法

// 處理多文件上傳,參數(shù)類型為MultipartFile數(shù)組參數(shù)名和JSP文件控件的name屬性一致
    @RequestMapping("/fileUpload3")
    public String upload3(MultipartFile files[],String username,HttpServletRequest request) throws Exception{
        System.out.println(username);
        // 1.設(shè)置上傳文件保存的文件夾
        String realPath = request.getSession().getServletContext().getRealPath("/upload/files");
        File dir = new File(realPath);
        if(!dir.exists()){
            dir.mkdirs();
        }
        // 2.遍歷數(shù)組,將上傳文件保存到文件夾
        for(MultipartFile file:files){
            String filename = file.getOriginalFilename();
            filename = UUID.randomUUID()+"_" +filename;
            File newFile = new File(dir,filename);
            file.transferTo(newFile);
        }
        return "index";
    }

這里我們可以知道,方法參數(shù)名改一下類型即可, 并且表單的文件name必須要一致,上傳后的文件放在upload文件夾子文件夾files里。

3.3 測(cè)試結(jié)果 

OK,如下圖,我們是可以成功添加了files文件夾,并且里面也是有文件的

以上就是Spring MVC多種情況下進(jìn)行文件上傳的實(shí)例的詳細(xì)內(nèi)容,更多關(guān)于Spring MVC文件上傳的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

航空| 巫溪县| 双鸭山市| 武陟县| 平顶山市| 泰来县| 冕宁县| 平湖市| 金塔县| 丹阳市| 焉耆| 湖州市| 布拖县| 大石桥市| 永定县| 新津县| 襄樊市| 峨边| 汾阳市| 沂源县| 阳山县| 荔浦县| 百色市| 宜兰县| 苏尼特左旗| 扶余县| 方正县| 温州市| 乌拉特后旗| 杂多县| 阿克| 辽阳市| 循化| 恩施市| 凉城县| 巍山| 勐海县| 宁夏| 井研县| 永新县| 花莲市|