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

springboot如何獲取文件流

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

springboot獲取文件流

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

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

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

在springBoot中,request.getRealPath("/") 不能獲取到項目路徑,查資料得知ResourceUtils.getURL("classpath:").getPath()能獲取到項目路徑,測試中發(fā)現(xiàn),ResourceUtils.getURL("classpath:").getPath()獲取到的是項目的絕對路徑,打包發(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)

不能用以獲取項目中的資源路徑。各種查資料測試得出:

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

可獲取輸入流。

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

通過訪問后臺返回文件流的方式我想大家都會,這次就不展開講了。主要想說的是向后臺傳遞文件路徑時的一些小思考!

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

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

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

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

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

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

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

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

踩過坑的我給您提供一個答案

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

兩種解決方案

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

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

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

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

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

相關(guān)文章

  • springmvc實現(xiàn)文件上傳功能

    springmvc實現(xiàn)文件上傳功能

    這篇文章主要為大家詳細(xì)介紹了springmvc實現(xiàn)文件上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • Java中的 BigDecimal 和 String 的相互轉(zhuǎn)換問題

    Java中的 BigDecimal 和 String 的相互轉(zhuǎn)換問題

    這篇文章主要介紹了Java中的 BigDecimal 和 String 的相互轉(zhuǎn)換問題,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • Java Servlet上傳圖片到指定文件夾并顯示圖片

    Java Servlet上傳圖片到指定文件夾并顯示圖片

    在學(xué)習(xí)Servlet過程中,針對圖片上傳做了一個Demo,如果大家對Java Servlet上傳圖片到指定文件夾并顯示圖片功能感興趣的朋友大家通過本文一起學(xué)習(xí)吧
    2017-08-08
  • java泛型詳解

    java泛型詳解

    本文主要介紹了java泛型的相關(guān)知識。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • LeetCode?動態(tài)規(guī)劃之矩陣區(qū)域和詳情

    LeetCode?動態(tài)規(guī)劃之矩陣區(qū)域和詳情

    這篇文章主要介紹了LeetCode?動態(tài)規(guī)劃之矩陣區(qū)域和詳情,文章基于Java的相關(guān)資料展開對LeetCode?動態(tài)規(guī)劃的詳細(xì)介紹,需要的小伙伴可以參考一下
    2022-04-04
  • java進(jìn)行error捕獲和處理示例(java異常捕獲)

    java進(jìn)行error捕獲和處理示例(java異常捕獲)

    通常來說,大家都是對Java中的Exception進(jìn)行捕獲和進(jìn)行相應(yīng)的處理,有些人說,error就無法捕獲了。其實,error也是可以捕獲的。Error和Exception都是Throwable的子類。既然可以catch Throwable,那么error也是可以catch的
    2014-01-01
  • Java自定義異常與異常使用的最佳方式

    Java自定義異常與異常使用的最佳方式

    這篇文章主要介紹了Java自定義異常與異常使用的最佳方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java中獲取webapp路徑問題詳解

    Java中獲取webapp路徑問題詳解

    這篇文章主要介紹了Java中獲取webapp路徑問題詳解,WebApp是指基于Web的?系統(tǒng)和?應(yīng)用,其作用是向廣大的最終用戶發(fā)布一組復(fù)雜的內(nèi)容和功能,本文詳解了關(guān)于獲取路徑時候可能出現(xiàn)的問題,需要的朋友可以參考下
    2023-07-07
  • SpringMVC中如何獲取@PathVariable的值

    SpringMVC中如何獲取@PathVariable的值

    這篇文章主要介紹了SpringMVC中如何獲取@PathVariable的值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • logback ThresholdFilter臨界值日志過濾器源碼解讀

    logback ThresholdFilter臨界值日志過濾器源碼解讀

    這篇文章主要為大家介紹了logback ThresholdFilter臨界值日志過濾器源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11

最新評論

淮北市| 庄河市| 六枝特区| 江北区| 乾安县| 太保市| 兴和县| 绥德县| 永仁县| 永寿县| 乌鲁木齐县| 崇州市| 阿图什市| 永安市| 平安县| 宁海县| 宿州市| 布尔津县| 吴川市| 新化县| 永和县| 随州市| 沙雅县| 临朐县| 临沭县| 邵武市| 长子县| 义乌市| 社旗县| 宕昌县| 陵水| 万年县| 安多县| 黄骅市| 兴海县| 临潭县| 揭阳市| 阿图什市| 永安市| 东辽县| 宣汉县|