使用springboot對外部靜態資源文件的處理操作
springboot對外部靜態資源文件的處理
springboot對外部資源文件的處理主要分為2部分,存和取,通過查看官方文件和看博客踩瞭坑之後終於搞定瞭,特此記錄。
1、存方面倒還簡單,這裡貼上一個獲取微信臨時素材並保存的方法
/** * @功能 下載臨時素材接口 * @param filePath 文件將要保存的目錄 * @param method 請求方法,包括POST和GET * @param url 請求的路徑 * @return */ public static String saveUrlAs(String url,String filePath,String method){ //創建不同的文件夾目錄 File file=new File(filePath); //判斷文件夾是否存在 if (!file.exists()) { //如果文件夾不存在,則創建新的的文件夾 file.mkdirs(); } FileOutputStream fileOut = null; HttpURLConnection conn = null; InputStream inputStream = null; String savePath = null ; try { // 建立鏈接 URL httpUrl=new URL(url); conn=(HttpURLConnection) httpUrl.openConnection(); //以Post方式提交表單,默認get方式 conn.setRequestMethod(method); conn.setDoInput(true); conn.setDoOutput(true); // post方式不能使用緩存 conn.setUseCaches(false); //連接指定的資源 conn.connect(); //獲取網絡輸入流 inputStream=conn.getInputStream(); BufferedInputStream bis = new BufferedInputStream(inputStream); //判斷文件的保存路徑後面是否以/結尾 if (!filePath.endsWith("/")) { filePath += "/"; } String filePathDir = DateUtil.getStringAllDate(); //寫入到文件(註意文件保存路徑的後面一定要加上文件的名稱) savePath = filePath+filePathDir+".png"; fileOut = new FileOutputStream(savePath); BufferedOutputStream bos = new BufferedOutputStream(fileOut); byte[] buf = new byte[4096]; int length = bis.read(buf); //保存文件 while(length != -1) { bos.write(buf, 0, length); length = bis.read(buf); } bos.close(); bis.close(); conn.disconnect(); } catch (Exception e) { e.printStackTrace(); logger.error(">>>>>>>>>>>>>>>>下載臨時素材接口拋出異常 [{}]",e.getMessage()); } return savePath; }
2、取,由於對springboot不熟悉,所以在這上面踩瞭坑
先看一下springboot官方文檔對靜態資源這一塊的表述
主要使用到這2個配置
spring.mvc.static-path-pattern=/resources/** //配置url訪問路徑 spring.resources.static-locations= //配置對應的文件路徑
由於我想要將靜態資源存到項目外部比如 和項目根目錄同級的 static文件夾裡,然後配置瞭
spring.resources.static-locations= static/ spring.mvc.static-path-pattern=/static/**
之後,訪問文件一直404
隨後網上查瞭一下,看到瞭一篇文章,發現
spring.resources.static-locations= file:xxx
使用瞭file: + 路徑這一配置方法,然後嘗試瞭一下,變成這樣:
spring: resources: static-locations: file:${my.config.static-location} my: config: static-location: /static/
發現文件訪問成功瞭!
所以實際上外部文件是需要file: 來配置的, static-locations默認訪問的是類路徑下的文件
SpringBoot2.x靜態資源訪問
問題
在springBoot1.5.x版本,訪問靜態資源直接訪問static目錄下的資源即可,不用帶上static前綴,在2.x以上就失效瞭,現在記錄下在2.x版本如何訪問靜態資源
開發環境:IDEA
文件目錄:
- templates存放官方推薦的thymeleaf模板
- static存放靜態資源
在controller目錄下新建一個類,繼承WebMvcConfigurationSupport,對靜態資源目錄說明
代碼
@Configuration public class WebConfig extends WebMvcConfigurationSupport { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/"); } }
原理
當訪問的url中匹配到/static/**時,就去訪問靜態資源存放地static目錄下尋找資源
在配置瞭靜態資源路徑後,就可以訪問靜態資源瞭,但是在訪問時需要在路徑前加上static
<a th:href="@{/static/imag1.jpg}" rel="external nofollow" >跳轉</a> <a th:href="@{/static/images/image2.jpg}" rel="external nofollow" >跳轉</a>
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- springboot如何通過URL方式訪問外部資源
- SpringBoot 如何實時刷新靜態文件
- Springboot導出文件,前端下載文件方式
- SpringBoot項目集成FTP的方法步驟
- Springboot與vue實現數據導出方法具體介紹