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

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

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

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

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

下載

新建一個(gè)頁(yè)面file.html,并且配置視圖控制器,以便跳轉(zhuǎn):

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

編寫(xiě)頁(yè)面內(nèi)容,用來(lái)下載我上面存放到 img 中的圖片:

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

后端編寫(xiě)對(duì)應(yīng)處理請(qǐng)求的控制,新建一個(gè)類(lèi) FileUpAndDownController,在下面編寫(xiě)控制器方法:

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

文件不管是上傳還是下載,本質(zhì)還是一個(gè)復(fù)制的過(guò)程。

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

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

重新部署測(cè)試一下,訪問(wèn) file 頁(yè)面,點(diǎn)擊下載超鏈接。

下載成功。

上傳

在前端頁(yè)面 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 表單的請(qǐng)求方式必須為 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對(duì)象中,通過(guò)此對(duì)象可以獲取文件相關(guān)信息。

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

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

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

@RequestMapping("/testUp")
    public String testUp(MultipartFile photo, HttpSession session) throws IOException {
        //獲取上傳的文件的文件名
        String fileName = photo.getOriginalFilename();
        //處理文件重名問(wèn)題
        String hzName = fileName.substring(fileName.lastIndexOf("."));
        fileName = UUID.randomUUID().toString() + hzName;
        //獲取服務(wù)器中 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;
        //實(shí)現(xiàn)上傳功能
        photo.transferTo(new File(finalPath));
        return "success";
    }

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

部署測(cè)試一下。

上傳請(qǐng)求處理成功,跳轉(zhuǎn)到了 success 頁(yè)。

再來(lái)看下目標(biāo)位置,已經(jīng)有了上傳過(guò)來(lái)的圖片了。

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

相關(guān)文章

  • Spring實(shí)戰(zhàn)之協(xié)調(diào)作用域不同步的Bean操作示例

    Spring實(shí)戰(zhàn)之協(xié)調(diào)作用域不同步的Bean操作示例

    這篇文章主要介紹了Spring實(shí)戰(zhàn)之協(xié)調(diào)作用域不同步的Bean操作,結(jié)合實(shí)例形式分析了Spring協(xié)調(diào)作用域不同步的Bean相關(guān)配置及使用技巧,需要的朋友可以參考下
    2019-11-11
  • Spring Boot @Async 異步任務(wù)執(zhí)行方法

    Spring Boot @Async 異步任務(wù)執(zhí)行方法

    本篇文章主要介紹了Spring Boot @Async 異步任務(wù)執(zhí)行方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • JAVA實(shí)戰(zhàn)練習(xí)之圖書(shū)管理系統(tǒng)實(shí)現(xiàn)流程

    JAVA實(shí)戰(zhàn)練習(xí)之圖書(shū)管理系統(tǒng)實(shí)現(xiàn)流程

    隨著網(wǎng)絡(luò)技術(shù)的高速發(fā)展,計(jì)算機(jī)應(yīng)用的普及,利用計(jì)算機(jī)對(duì)圖書(shū)館的日常工作進(jìn)行管理勢(shì)在必行,本篇文章手把手帶你用Java實(shí)現(xiàn)一個(gè)圖書(shū)管理系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平
    2021-10-10
  • SpringBoot中的配置文件加載優(yōu)先級(jí)詳解

    SpringBoot中的配置文件加載優(yōu)先級(jí)詳解

    這篇文章主要介紹了SpringBoot中的配置文件加載優(yōu)先級(jí)詳解,springboot啟動(dòng)會(huì)掃描以下位置的application.properties或者application.yml文件作為Spring?boot的默認(rèn)配置文件,需要的朋友可以參考下
    2024-01-01
  • Java獲取IP地址及對(duì)應(yīng)的歸屬地的方法詳解

    Java獲取IP地址及對(duì)應(yīng)的歸屬地的方法詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用Java獲取IP地址及對(duì)應(yīng)的歸屬地,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-03-03
  • Spring + Spring Boot + MyBatis + MongoDB的整合教程

    Spring + Spring Boot + MyBatis + MongoDB的整合教程

    這篇文章主要給大家介紹了關(guān)于Spring + Spring Boot + MyBatis + MongoDB的整合教程,文中通過(guò)圖文以及示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-12-12
  • Java中終止線程的方法詳解

    Java中終止線程的方法詳解

    這篇文章主要介紹了Java中終止線程的方法詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 一文帶你掌握J(rèn)PA實(shí)體類(lèi)注解

    一文帶你掌握J(rèn)PA實(shí)體類(lèi)注解

    這篇文章主要給大家詳細(xì)介紹一下?JPA?實(shí)體類(lèi)中的注解,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定的幫助,感興趣的小伙伴可以了解一下
    2023-01-01
  • Java數(shù)據(jù)結(jié)構(gòu)之單鏈表的實(shí)現(xiàn)與面試題匯總

    Java數(shù)據(jù)結(jié)構(gòu)之單鏈表的實(shí)現(xiàn)與面試題匯總

    由于順序表的插入刪除操作需要移動(dòng)大量的元素,影響了運(yùn)行效率,因此引入了線性表的鏈?zhǔn)酱鎯?chǔ)——單鏈表。本文為大家介紹了單鏈表的實(shí)現(xiàn)與面試題匯總,感興趣的可以了解一下
    2022-10-10
  • java內(nèi)部類(lèi)的最詳細(xì)詳解

    java內(nèi)部類(lèi)的最詳細(xì)詳解

    內(nèi)部類(lèi)是指在一個(gè)外部類(lèi)的內(nèi)部再定義一個(gè)類(lèi),下面這篇文章主要給大家介紹了關(guān)于java內(nèi)部類(lèi)的最詳細(xì)詳解,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06

最新評(píng)論

科技| 象山县| 肥西县| 钦州市| 襄垣县| 石泉县| 白朗县| 上饶县| 遂川县| 永和县| 衡阳县| 扶风县| 新乐市| 土默特左旗| 隆子县| 孝昌县| 五华县| 浠水县| 河津市| 远安县| 孝感市| 临夏市| 个旧市| 阿瓦提县| 安多县| 宽甸| 汝城县| 当涂县| 胶南市| 博乐市| 东丰县| 惠来县| 沅江市| 搜索| 西乌珠穆沁旗| 德令哈市| 东乌珠穆沁旗| 临沭县| 怀化市| 开鲁县| 金塔县|