中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringMVC如何使用ResponseEntity實現文件上傳下載

發布時間:2022-05-30 10:19:00 來源:億速云 閱讀:236 作者:iii 欄目:開發技術

本篇內容主要講解“SpringMVC如何使用ResponseEntity實現文件上傳下載”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“SpringMVC如何使用ResponseEntity實現文件上傳下載”吧!

使用 ResponseEntity 實現文件上傳和下載

在 static 下新建一個 img ,并且我放了一張圖片在里面,然后重新 maven 打包一下。

SpringMVC如何使用ResponseEntity實現文件上傳下載

下載

新建一個頁面file.html,并且配置視圖控制器,以便跳轉:

<mvc:view-controller path="/file" view-name="file"></mvc:view-controller>

編寫頁面內容,用來下載我上面存放到 img 中的圖片:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>測試文件上傳和下載</title>
</head>
<body>
<a th:href="@{/testDown}" rel="external nofollow" >下載靜態圖片</a>
</body>
</html>

后端編寫對應處理請求的控制,新建一個類 FileUpAndDownController,在下面編寫控制器方法:

@Controller
public class FileUpAndDownController {
    @RequestMapping("/testDown")
    public ResponseEntity<byte[]> testResponseEntity(HttpSession session) throws IOException {
        //獲取ServletContext對象
        ServletContext servletContext = session.getServletContext();
        //獲取服務器中文件的真實路徑
        String realPath = servletContext.getRealPath("/static/img/ACC3.jpg");
        //創建輸入流
        InputStream is = new FileInputStream(realPath);
        //創建字節數組,is.available()是當前流的所有字節數
        byte[] bytes = new byte[is.available()];
        //將流讀到字節數組中
        is.read(bytes);
        //創建HttpHeaders對象設置響應頭信息
        MultiValueMap<String, String> headers = new HttpHeaders();
        //設置要下載方式以及下載文件的名字
        headers.add("Content-Disposition", "attachment;filename=ACC3.jpg");
        //設置響應狀態碼
        HttpStatus statusCode = HttpStatus.OK;
        //創建ResponseEntity對象
        ResponseEntity<byte[]> responseEntity = new ResponseEntity<byte[]>(bytes, headers, statusCode);
        //關閉輸入流
        is.close();
        return responseEntity;
    }
}

文件不管是上傳還是下載,本質還是一個復制的過程。

既然要復制,那還是要先讀后寫,所以上面創建了輸入流,將流讀到字節數組中,然后把這個字節數組響應到瀏覽器,這就是要下載的文件了。

所以,用到了 ResponseEntity,要把響應到瀏覽器的數據轉化成 ResponseEntity,最后返回。

重新部署測試一下,訪問 file 頁面,點擊下載超鏈接。

SpringMVC如何使用ResponseEntity實現文件上傳下載

下載成功。

SpringMVC如何使用ResponseEntity實現文件上傳下載

上傳

在前端頁面 file.html 中繼續添加內容:

<form th:action="@{/testUp}" method="post" enctype="multipart/form-data">
    頭像:<input type="file" name="photo"><br>
    <input type="submit" value="上傳">
</form>

文件上傳要求 form 表單的請求方式必須為 post,并且添加屬性 enctype="multipart/form-data"。

添加依賴:

<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.3.1</version>
    </dependency>

SpringMVC 中將上傳的文件封裝到MultipartFile對象中,通過此對象可以獲取文件相關信息。

在 springMVC 的配置文件中添加配置:

<!--必須通過文件解析器的解析才能將文件轉換為MultipartFile對象-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>

增加控制器方法,實現上傳:

@RequestMapping("/testUp")
    public String testUp(MultipartFile photo, HttpSession session) throws IOException {
        //獲取上傳的文件的文件名
        String fileName = photo.getOriginalFilename();
        //處理文件重名問題
        String hzName = fileName.substring(fileName.lastIndexOf("."));
        fileName = UUID.randomUUID().toString() + hzName;
        //獲取服務器中 photo目錄的路徑
        ServletContext servletContext = session.getServletContext();
        String photoPath = servletContext.getRealPath("photo");
        File file = new File(photoPath);
        if(!file.exists()){
            file.mkdir(); // 不存在則創建目錄
        }
        String finalPath = photoPath + File.separator + fileName;
        //實現上傳功能
        photo.transferTo(new File(finalPath));
        return "success";
    }

注意,我們最終上傳的位置是在這里,會自動創建一個 photo 目錄,里面存放著上傳的圖片。

SpringMVC如何使用ResponseEntity實現文件上傳下載

部署測試一下。

SpringMVC如何使用ResponseEntity實現文件上傳下載

上傳請求處理成功,跳轉到了 success 頁。

SpringMVC如何使用ResponseEntity實現文件上傳下載

再來看下目標位置,已經有了上傳過來的圖片了。

SpringMVC如何使用ResponseEntity實現文件上傳下載

到此,相信大家對“SpringMVC如何使用ResponseEntity實現文件上傳下載”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

连江县| 平陆县| 三台县| 永川市| 秀山| 无极县| 南安市| 谷城县| 徐闻县| 梅州市| 龙口市| 肇东市| 太仆寺旗| 高邑县| 陵川县| 达日县| 诏安县| 曲水县| 合江县| 临猗县| 曲靖市| 西峡县| 吉木萨尔县| 桑植县| 历史| 当涂县| 铜梁县| 苏州市| 从化市| 陇西县| 清苑县| 肥乡县| 海兴县| 宜兰市| 武安市| 景洪市| 建水县| 慈利县| 温泉县| 庆云县| 天台县|