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

springboot如何獲取文件流

 更新時(shí)間:2022年03月18日 08:42:30   作者:空城v1  
這篇文章主要介紹了springboot如何獲取文件流,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

springboot獲取文件流

在日常開(kāi)發(fā)中,經(jīng)常會(huì)獲取項(xiàng)目的相對(duì)路徑用以獲取存放在項(xiàng)目路徑下的資源,如獲取static/ss.txt

在spring項(xiàng)目中,  可以用request.getRealPath("/")獲取項(xiàng)目路徑然后拼接起來(lái),再生成流:

//拼接地址
String downLoadUrl = request.getRealPath("/") + "/static/ss.txt/" ;
// 生成流
InputStream is = new FileInputStream(downLoadUrl);

在springBoot中,request.getRealPath("/") 不能獲取到項(xiàng)目路徑,查資料得知ResourceUtils.getURL("classpath:").getPath()能獲取到項(xiàng)目路徑,測(cè)試中發(fā)現(xiàn),ResourceUtils.getURL("classpath:").getPath()獲取到的是項(xiàng)目的絕對(duì)路徑,打包發(fā)版提示:

java.io.FileNotFoundException: file:/usr/local/risk_dubbo/risk-admin/20181105_161334risk-admin.war!/WEB-INF/classes!/static/ss.txt (No such file or directory)

不能用以獲取項(xiàng)目中的資源路徑。各種查資料測(cè)試得出:

String downLoadUrl = "/static/ss.txt" ;
InputStream is = this.getClass().getResourceAsStream(downLoadUrl);

可獲取輸入流。

前端獲取springboot返回的文件流的踩坑

通過(guò)訪問(wèn)后臺(tái)返回文件流的方式我想大家都會(huì),這次就不展開(kāi)講了。主要想說(shuō)的是向后臺(tái)傳遞文件路徑時(shí)的一些小思考!

前提是訪問(wèn)圖片流的方式用的是restful + 動(dòng)態(tài)路徑填充的方式,eg: locahost:8080/test/img/1.png

如果你獲取的文件路徑只是文件名的話(就像我上面舉的例子),文件路徑就可以安全的傳遞到后臺(tái),完全沒(méi)有問(wèn)題。

但是假如你現(xiàn)在的文件路徑為:shop/goods/title/1.png ,你應(yīng)該怎么進(jìn)行傳遞?

這樣嗎 -> eg: locahost:8080/test/img/shop/goods/title/1.png   仔細(xì)的人會(huì)發(fā)現(xiàn)這樣是行不通的,因?yàn)闉g覽器會(huì)去匹配后臺(tái)的url為: img/shop/goods/title/,對(duì)應(yīng)的動(dòng)態(tài)的參數(shù)為1.png;  這并不是我們想要的結(jié)果,我們想把  shop/goods/title/1.png  作為參數(shù)傳遞到后臺(tái),結(jié)果為報(bào)404!

那么應(yīng)該怎么處理呢?聰明的同學(xué)會(huì)想到替換(replace),將  /  替換為 '-' 或者其他的操作符

假如說(shuō)替換成 '-' 的話,那么應(yīng)該怎么替換呢?后臺(tái)接收時(shí)又應(yīng)該怎么進(jìn)行恢復(fù)原來(lái)的文件路徑呢?

如果你選擇在前臺(tái) replaceAll ,后臺(tái)再進(jìn)行轉(zhuǎn)義回來(lái),如果你的文件名上傳到服務(wù)器不打算保存,直接存儲(chǔ)一串?dāng)?shù)字的話應(yīng)該是沒(méi)有問(wèn)題的!

假如現(xiàn)在路徑參數(shù)變?yōu)?  shop/goods/title/2019-04-12.png,那后臺(tái)恢復(fù)文件路徑的時(shí)候就變成了: shop/goods/title/2019/04/12.png ,你可能會(huì)驚訝,what?啥情況

踩過(guò)坑的我給您提供一個(gè)答案

仔細(xì)觀察windows的文件命名會(huì)發(fā)現(xiàn) 一些禁用的字符  < > / \ | : " * ?,你會(huì)發(fā)現(xiàn) / 也在其中包括,所以呢,所以呢,文件命名不可能出現(xiàn) / 

兩種解決方案

A方案:在你確定當(dāng)前目錄的個(gè)數(shù)的情況下進(jìn)行處理,可以寫一個(gè)while循環(huán),假如當(dāng)前目錄有3個(gè),while(n<=3){ path = path.repalceFirst('-','/') },前提是目錄不帶 '-'  的情況下

B方案:在前端傳遞時(shí),記錄路徑每個(gè) '/' 的位置,然后將位置拼接到文件名最后然后傳遞到后臺(tái),這樣即可完成精確的恢復(fù)文件路徑。

說(shuō)到這里,前面忘了一點(diǎn):就是直接訪問(wèn)1.png時(shí),為了進(jìn)行路徑的精確匹配,可以在后臺(tái)路徑映射時(shí)添加此配置: {file:.+}

說(shuō)了這么多,如果你們項(xiàng)目中上傳文件不需要保留文件名,文件名全靠自定義的話,也就不可能有這么多的事了 

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • springboot+nginx+https+linux實(shí)現(xiàn)負(fù)載均衡加域名訪問(wèn)簡(jiǎn)單測(cè)試

    springboot+nginx+https+linux實(shí)現(xiàn)負(fù)載均衡加域名訪問(wèn)簡(jiǎn)單測(cè)試

    這篇文章主要介紹了springboot+nginx+https+linux實(shí)現(xiàn)負(fù)載均衡加域名訪問(wèn)簡(jiǎn)單測(cè)試,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-05-05
  • 一次mybatis連接查詢遇到的坑實(shí)戰(zhàn)記錄

    一次mybatis連接查詢遇到的坑實(shí)戰(zhàn)記錄

    這篇文章主要給大家介紹了關(guān)于一次mybatis連接查詢遇到的坑的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 使用Jenkins來(lái)構(gòu)建SVN+Maven項(xiàng)目的實(shí)現(xiàn)

    使用Jenkins來(lái)構(gòu)建SVN+Maven項(xiàng)目的實(shí)現(xiàn)

    這篇文章主要介紹了使用Jenkins來(lái)構(gòu)建SVN+Maven項(xiàng)目的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 支撐Java NIO與NodeJS的底層技術(shù)

    支撐Java NIO與NodeJS的底層技術(shù)

    這篇文章主要為大家詳細(xì)介紹了支撐Java NIO與NodeJS的底層技術(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • java之swing單選框用法實(shí)例分析

    java之swing單選框用法實(shí)例分析

    這篇文章主要介紹了java之swing單選框用法,以實(shí)例形式分析了swing圖形界面單選框的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-09-09
  • 解決線程并發(fā)redisson使用遇到的坑

    解決線程并發(fā)redisson使用遇到的坑

    這篇文章主要介紹了解決線程并發(fā)redisson使用遇到的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Spring JPA find單表查詢方法示例詳解

    Spring JPA find單表查詢方法示例詳解

    這篇文章主要為大家介紹了Spring JPA find單表查詢方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • java對(duì)象類型轉(zhuǎn)換和多態(tài)性(實(shí)例講解)

    java對(duì)象類型轉(zhuǎn)換和多態(tài)性(實(shí)例講解)

    下面小編就為大家?guī)?lái)一篇java對(duì)象類型轉(zhuǎn)換和多態(tài)性(實(shí)例講解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • SpringCloud Hystrix的使用

    SpringCloud Hystrix的使用

    這篇文章主要介紹了SpringCloud Hystrix的使用,幫助大家更好的理解和學(xué)習(xí)使用SpringCloud,感興趣的朋友可以了解下
    2021-04-04
  • 詳解Java 打印堆棧的幾種方法

    詳解Java 打印堆棧的幾種方法

    本篇文章主要介紹了Java 打印堆棧的幾種方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06

最新評(píng)論