欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringMVC使用ResponseEntity實現(xiàn)文件上傳下載

 更新時間:2022年05月28日 11:45:28   作者:把蘋果咬哭的測試筆記  
這篇文章主要為大家介紹了SpringMVC使用ResponseEntity實現(xiàn)文件上傳下載,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

使用 ResponseEntity 實現(xiàn)文件上傳和下載

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

下載

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

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

編寫頁面內(nèi)容,用來下載我上面存放到 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" >下載靜態(tài)圖片</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");
        //創(chuàng)建輸入流
        InputStream is = new FileInputStream(realPath);
        //創(chuàng)建字節(jié)數(shù)組,is.available()是當前流的所有字節(jié)數(shù)
        byte[] bytes = new byte[is.available()];
        //將流讀到字節(jié)數(shù)組中
        is.read(bytes);
        //創(chuàng)建HttpHeaders對象設置響應頭信息
        MultiValueMap<String, String> headers = new HttpHeaders();
        //設置要下載方式以及下載文件的名字
        headers.add("Content-Disposition", "attachment;filename=ACC3.jpg");
        //設置響應狀態(tài)碼
        HttpStatus statusCode = HttpStatus.OK;
        //創(chuàng)建ResponseEntity對象
        ResponseEntity<byte[]> responseEntity = new ResponseEntity<byte[]>(bytes, headers, statusCode);
        //關閉輸入流
        is.close();
        return responseEntity;
    }
}

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

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

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

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

下載成功。

上傳

在前端頁面 file.html 中繼續(xù)添加內(nèi)容:

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

增加控制器方法,實現(xiàn)上傳:

@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(); // 不存在則創(chuàng)建目錄
        }
        String finalPath = photoPath + File.separator + fileName;
        //實現(xiàn)上傳功能
        photo.transferTo(new File(finalPath));
        return "success";
    }

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

部署測試一下。

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

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

以上就是SpringMVC使用ResponseEntity實現(xiàn)文件上傳下載的詳細內(nèi)容,更多關于SpringMVC文件上傳下載的資料請關注腳本之家其它相關文章!

相關文章

  • 如何用JAVA判斷當前時間是否為節(jié)假日、周末、工作日及調(diào)休日(不報錯:IOException!)

    如何用JAVA判斷當前時間是否為節(jié)假日、周末、工作日及調(diào)休日(不報錯:IOException!)

    最近公司有個業(yè)務需要判斷工作日,但是每年的節(jié)假日不一樣,下面這篇文章主要給大家介紹了關于如何用JAVA判斷當前時間是否為節(jié)假日、周末、工作日及調(diào)休日的相關資料,且不報錯:IOException!,需要的朋友可以參考下
    2023-12-12
  • Java基礎入門之switch怎么使用枚舉

    Java基礎入門之switch怎么使用枚舉

    在Java開發(fā)中,switch語句是一種常用的流控制語句,而當使用枚舉類型作為條件時,我們常常會遇到報錯問題,那么該如何解決呢,下面就來詳細講講
    2023-06-06
  • Mybatis?如何開啟控制臺打印sql語句

    Mybatis?如何開啟控制臺打印sql語句

    這篇文章主要介紹了Mybatis?如何開啟控制臺打印sql語句問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Java之springcloud Sentinel案例講解

    Java之springcloud Sentinel案例講解

    這篇文章主要介紹了Java之springcloud Sentinel案例講解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 親身體驗Intellij?Idea從卡頓到順暢全過程

    親身體驗Intellij?Idea從卡頓到順暢全過程

    這篇文章主要介紹了親身體驗Intellij?Idea從卡頓到順暢全過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Apache Shrio安全框架實現(xiàn)原理及實例詳解

    Apache Shrio安全框架實現(xiàn)原理及實例詳解

    這篇文章主要介紹了Apache Shrio安全框架實現(xiàn)原理及實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • ShardingSphere解析SQL示例詳解

    ShardingSphere解析SQL示例詳解

    這篇文章主要為大家介紹了ShardingSphere解析SQL的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • Java實戰(zhàn)之客戶信息管理系統(tǒng)

    Java實戰(zhàn)之客戶信息管理系統(tǒng)

    這篇文章主要介紹了Java實戰(zhàn)之客戶信息管理系統(tǒng),文中有非常詳細的代碼示例,對正在學習java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Java編程用兩個棧實現(xiàn)隊列代碼分享

    Java編程用兩個棧實現(xiàn)隊列代碼分享

    這篇文章主要介紹了Java編程用兩個棧實現(xiàn)隊列代碼分享,具有一定參考價值,這里給大家分享下,供需要的朋友了解。
    2017-10-10
  • Java實現(xiàn)拆箱和裝箱的原理解析

    Java實現(xiàn)拆箱和裝箱的原理解析

    Java 是一種強類型語言,然而在 Java中Integer類型和 int類型兩種不同類型的數(shù)字卻能正常地進行數(shù)學運算,為什么?今天我們就來聊聊其背后的秘密:拆箱和裝箱,感興趣的小伙伴跟著小編一起來看看吧
    2024-05-05

最新評論