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

Spring?MVC異步上傳、跨服務(wù)器上傳和文件下載功能實現(xiàn)

 更新時間:2023年07月14日 10:27:41   作者:會洗碗的CV工程師  
這篇文章主要介紹了Spring?MVC異步上傳、跨服務(wù)器上傳和文件下載功能實現(xiàn),本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

一、異步上傳

之前的上傳方案,在上傳成功后都會跳轉(zhuǎn)頁面。而在實際開發(fā)中,很多情況下上傳后不進行跳轉(zhuǎn),而是進行頁面的局部刷新,比如:上傳頭像成功后將頭像顯示在網(wǎng)頁中。這時候就需要使用異步文件上傳。

1.1 JSP頁面

編寫JSP頁面,引入jQuery和jQuery表單上傳工具jquery.form.js【該js文件已經(jīng)上傳到我的資源,有需要的小伙伴可以自行下載】

upload4.jsp 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>上傳</title>
    <script src="/js/jquery-2.1.1.min.js"></script>
    <script src="/js/jquery.form.js"></script>
</head>
<body>
<h3>文件上傳</h3>
<form id="ajaxForm" enctype="multipart/form-data">
    <input type="file" name="file"/>
    <%-- 按鈕類型不能是submit,否則會刷新頁面 --%>
    <input type="button" value="上傳頭像" id="btn"/>
    <!-- 上傳頭像后展示的位置 -->
    <img src="/" width="100" id="img">
    <script>
        $(function () {
            $("#btn").click(function () {
                // 異步提交表單
                $("#ajaxForm").ajaxSubmit({
                    url: "/fileUpload4",
                    type: "post",
                    success: function (data) {
                        $("#img").attr("src", data);
                        console.log(data);
                    }
                })
            })
        })
    </script>
</form>
</body>
</html>

1.2 控制器方法

// 接收異步上傳請求
    @RequestMapping("/fileUpload4")
    // 不進行頁面跳轉(zhuǎn)
    @ResponseBody
    public String upload3(HttpServletRequest request,MultipartFile file) throws Exception{
        // 1.設(shè)置上傳文件保存的文件夾,存放上傳的文件
        String realPath = request.getSession().getServletContext().getRealPath("/upload");
        File dir = new File(realPath);
        if(!dir.exists()){
            dir.mkdirs();
        }
        // 拿到上傳文件名
        String filename = file.getOriginalFilename();
        filename = UUID.randomUUID()+"_"+filename;
        // 創(chuàng)建空文件
        File newFile = new File(dir,filename);
        // 將上傳的文件寫到空文件中
        file.transferTo(newFile);
        System.out.println("/upload/"+filename);
        return "/upload/"+filename;
    }

1.3 測試結(jié)果

訪問路徑:http://localhost:8080/upload4.jsp

OK,我們可以看得出來確實只刷新了頭像那一部分的頁面。本次案例成功實現(xiàn) 

二、跨服務(wù)器上傳

由于文件占據(jù)磁盤空間較大,在實際開發(fā)中往往會將文件上傳到其他服務(wù)器中,此時需要使用跨服務(wù)器上傳文件。

2.1 修改tomcat的部分配置

1. 解壓tomcat作為圖片服務(wù)器,在tomcat的webapps下創(chuàng)建upload目錄作為文件上傳目錄。

這是我自己的tomcat安裝目錄,新建一個upload文件夾。 

2. 修改tomcat的 conf/web.xml 文件,支持跨服上傳。

<servlet>  
  <init-param>    
    <param-name>readonly</param-name>
    <param-value>false</param-value> 
  </init-param>
</servlet>

3. 修改tomcat的 conf/server.xml 文件,修改tomcat端口,修改完開啟tomcat服務(wù)器,如下圖:

<Connector port="8081" protocol="HTTP/1.1"connectionTimeout="20000" redirectPort="8443" />

 雙擊運行

出現(xiàn)該頁面,不要關(guān)閉這個頁面?。?! 

2.2 JSP頁面

這里的內(nèi)容和上面的JSP沒有區(qū)別!只是響應(yīng)的路徑不一樣。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>上傳</title>
    <script src="/js/jquery-2.1.1.min.js"></script>
    <script src="/js/jquery.form.js"></script>
</head>
<body>
<h3>文件上傳</h3>
<form id="ajaxForm" enctype="multipart/form-data">
    <input type="file" name="file"/>
    <%-- 按鈕類型不能是submit,否則會刷新頁面 --%>
    <input type="button" value="上傳頭像" id="btn"/>
    <!-- 上傳頭像后展示的位置 -->
    <img src="/" width="100" id="img">
    <script>
        $(function () {
            $("#btn").click(function () {
                // 異步提交表單
                $("#ajaxForm").ajaxSubmit({
                    url: "/fileUpload5",
                    type: "post",
                    success: function (data) {
                        $("#img").attr("src", data);
                        console.log(data);
                    }
                })
            })
        })
    </script>
</form>
</body>
</html>

2.3 添加依賴

這里我們需要在pom.xml添加跨服上傳依賴

    <!-- 跨服上傳 -->
    <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>

2.4 控制器方法

創(chuàng)建控制器方法,該方法在接受到上傳請求后將文件保存到其他服務(wù)器上。

    // 該方法接收到上傳請求后將文件保存到其他服務(wù)器上
    @RequestMapping("/fileUpload5")
    @ResponseBody
    public String upload4(HttpServletRequest request,MultipartFile file) throws Exception{
        // 設(shè)置跨服上傳的服務(wù)器路徑
        String path = "http://localhost:8081/upload/";
        // 獲取上傳的文件名
        String filename = file.getOriginalFilename();
        filename = UUID.randomUUID()+"_"+filename;
        // 跨服上傳:
        // 1.創(chuàng)建客戶端對象
        Client client = Client.create();
        // 2.使用客戶端對象連接圖片服務(wù)器
        WebResource resource = client.resource(path+filename);
        // 3.傳輸數(shù)據(jù)
        resource.put(file.getBytes());
        System.out.println(path+filename);
        return path+filename;
    }

2.5 測試結(jié)果 

訪問路徑:http://localhost:8080/upload5.jsp

可以看得到確實成功上傳到了服務(wù)器上面的upload目錄下

三、文件下載

將文件上傳到服務(wù)器后,有時我們需要讓用戶下載上傳的文件,接下來我們編寫文件下載功能:

3.1 查詢可下載文件方法

編寫控制器方法,查詢所有可下載的文件(我這里是查詢存放在/webapps/upload/目錄下的圖片),并跳轉(zhuǎn)到下載頁面

// 查詢可下載的文件
    @RequestMapping("/showFiles")
    public String showFileDown(HttpServletRequest request, Model model){
        // 1.獲取下載文件路徑集合。注:跨服務(wù)器上傳中,網(wǎng)絡(luò)路徑無法獲取文件列表。
        String path = request.getSession().getServletContext().getRealPath("/upload");
        File file = new File(path);
        String [] files = file.list();
        // 2.將路徑放入模型中,跳轉(zhuǎn)到JSP頁面
        model.addAttribute("files",files);
        return "download";
    }

3.2 添加JSTL依賴

    <!-- 添加JSTL依賴 -->
    <dependency>
      <groupId>org.apache.taglibs</groupId>
      <artifactId>taglibs-standard-spec</artifactId>
      <version>1.2.5</version>
    </dependency>
    <dependency>
      <groupId>org.apache.taglibs</groupId>
      <artifactId>taglibs-standard-impl</artifactId>
      <version>1.2.5</version>
    </dependency>

3.3 編寫下載頁面

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>下載</title>
</head>
<body>
<h3>文件下載</h3>
<%-- 遍歷文件集合  --%>
<c:forEach items="${files}" var="file">
    <a href="/download?fileName=${file}" rel="external nofollow" >${file}</a><br/>
</c:forEach>
</body>
</html>

3.4 下載控制器方法

    // 文件下載
    @RequestMapping("/download")
    public void fileDown(HttpServletRequest request, HttpServletResponse response,String fileName) throws Exception{
        // 設(shè)置響應(yīng)頭
        response.setHeader("Content-Disposition","attachment;filename="+fileName);
        // 獲取文件路徑
        String path = request.getSession().getServletContext().getRealPath("/upload");
        File file = new File(path,fileName);
        // 獲取字節(jié)輸出流
        ServletOutputStream os = response.getOutputStream();
        // 使用輸出流寫出文件
        os.write(FileUtils.readFileToByteArray(file));
        os.flush();
        os.close();
    }

3.5 測試結(jié)果

OK,我們先來訪問http://localhost:8080/showFiles

查詢出所有可以下載的文件:然后點擊下載也是可以成功下載,文件的上傳和下載就學(xué)習(xí)到這里了。

到此這篇關(guān)于Spring MVC異步上傳、跨服務(wù)器上傳和文件下載的文章就介紹到這了,更多相關(guān)Spring MVC文件上傳下載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決spring-cloud-config 多服務(wù)共享公共配置的問題

    解決spring-cloud-config 多服務(wù)共享公共配置的問題

    這篇文章主要介紹了解決spring-cloud-config 多服務(wù)共享公共配置的問題,本文通過多種方法給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • 使用maven打包生成doc文檔和打包源碼

    使用maven打包生成doc文檔和打包源碼

    這篇文章主要介紹了使用maven打包生成doc文檔和打包源碼的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • java中如何執(zhí)行xshell命令

    java中如何執(zhí)行xshell命令

    這篇文章主要介紹了java中如何執(zhí)行xshell命令,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java操作數(shù)據(jù)庫(行級鎖,for update)

    Java操作數(shù)據(jù)庫(行級鎖,for update)

    這篇文章主要介紹了Java操作數(shù)據(jù)庫(行級鎖,for update),文章圍繞Java操作數(shù)據(jù)庫的相關(guān)資料展開詳細內(nèi)容,需要的小伙伴可以參考一下,希望對你有所幫助
    2021-12-12
  • 解決JPA?save()方法null值覆蓋掉mysql預(yù)設(shè)的默認值問題

    解決JPA?save()方法null值覆蓋掉mysql預(yù)設(shè)的默認值問題

    這篇文章主要介紹了解決JPA?save()方法null值覆蓋掉mysql預(yù)設(shè)的默認值問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • @Validated和@Valid三種異常捕獲處理方式

    @Validated和@Valid三種異常捕獲處理方式

    這篇文章主要介紹了@Validated和@Valid三種異常捕獲處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • chatgpt java環(huán)境調(diào)用源碼實現(xiàn)demo

    chatgpt java環(huán)境調(diào)用源碼實現(xiàn)demo

    這篇文章主要介紹了chatgpt java環(huán)境調(diào)用源碼實現(xiàn)demo,本文結(jié)合實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • SpringBoot左腳進門之Maven管理家具體步驟

    SpringBoot左腳進門之Maven管理家具體步驟

    Maven 是一個項目管理和整合工具,通過對 目錄結(jié)構(gòu)和構(gòu)建生命周期 的標(biāo)準(zhǔn)化, 使開發(fā)團隊用極少的時間就能夠自動完成工程的基礎(chǔ)構(gòu)建配置,本文介紹SpringBoot左腳進門之Maven管理家具體步驟,感興趣的朋友一起看看吧
    2024-12-12
  • java字符串反轉(zhuǎn)的7種方法

    java字符串反轉(zhuǎn)的7種方法

    本文主要介紹了java字符串反轉(zhuǎn)的7種方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • SpringBoot整合Netty開發(fā)MQTT服務(wù)端

    SpringBoot整合Netty開發(fā)MQTT服務(wù)端

    Netty是一款基于NIO(Nonblocking I/O,非阻塞IO)開發(fā)的網(wǎng)絡(luò)通信框架,本文主要介紹了SpringBoot如何整合Netty開發(fā)MQTT服務(wù)端,感興趣的小伙伴可以了解下
    2025-07-07

最新評論

大庆市| 安阳县| 静宁县| 北海市| 东明县| 安新县| 泰安市| 阜新| 郧西县| 杂多县| 读书| 阿鲁科尔沁旗| 都江堰市| 延川县| 广汉市| 临安市| 台江县| 和龙市| 绍兴市| 潞西市| 晋江市| 社旗县| 墨江| 深圳市| 呼和浩特市| 平山县| 延边| 北川| 龙泉市| 江安县| 吉木萨尔县| 雷山县| 靖西县| 景泰县| 盐山县| 阳山县| 水城县| 普安县| 马龙县| 黄梅县| 榆社县|