一、基於yml 或者properties配置文件
上傳的文件存放在某盤某目錄下,如 E:/Practices/test
具體配置:
web:
upload-path: E:/Practices/test
front-path: E:/Practices
spring:
resources:
static-locations: file:${web.upload-path},file:${web.front-path}
訪問方式:IP+端口/文件名
現在:http://localhost:8003/1442823076292.jpeg
注:不需要配置什麼加載配置類,上傳的文件到 E:/Practices/test。文件顯示如上訪問。
二、基於springboot配置類,改變原來的默認配置
此處不在贅述上傳過程,簡單描述它的上傳思路:
上傳的文件存放在某盤某目錄下,如 E:/視頻製作/圖片/
通過配置文件類 WebMvcConfig 將本地存放文件目錄映射到項目路徑下,具體查看配置類
項目啓動,加載配置類。
配置類如下:
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
String path = "E:\\Practices\\";//"/tools/images/";//"E:/視頻製作/圖片/";
// 上傳路徑映射 會使spring boot的自動配置失效
registry.addResourceHandler("/image/**").addResourceLocations("file:" + path);
super.addResourceHandlers(registry);
}
}
意思:
項目訪問image路徑會直接訪問path路徑下的文件
訪問方式:
原來:file:///E:/%E8%A7%86%E9%A2%91%E5%88%B6%E4%BD%9C/%E5%9B%BE%E7%89%87/1442823076292.jpeg
現在:
http://localhost:9001/image/1442823076292.jpeg
http://localhost:9001/image/one/1442823076292.jpeg
三、基於絕對路徑訪問
簡單思路:
獲取resources下的某目錄,如static文件夾。獲取方式如下:
File staticFilePath = ResourceUtils.getFile("classpath:static");
根據獲得的路徑,創建新的路徑,並上傳文件。詳情查看AbsolutePathController的方法uploadToProject
基於默認配置,則不需要加配置類。
若加了配置類,改變原來的路徑情況,需要補上:
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
super.addResourceHandlers(registry);
}
對比解析:上傳的文件到項目的resources目錄下,實際加載得到的文件是絕對路徑下的文件如image/1442823076292.jpeg,主要的原理還是文件映射。訪問的時候,直接http://localhost:9001/images/1442823076292.jpeg
注:不適用jar包形式啓動的項目,樓主暫時沒有找到好的方案,有好的方案,麻煩多多分享,謝謝。可以本地調試玩耍。生產上,建議使用外部路徑
四、基於Nginx配置的訪問
簡單思路:
上傳文件到某路徑下,如C:/文件
使用Nginx服務器,配置訪問路徑並映射到文件上傳的路徑下
以下是Nginx的配置
基於alias配置
location /static/ {
alias /var/www/static/;
}
alas會把指定路徑當作文件路徑
注意:alias指定的目錄後面必須要加上"/",即/var/www/static/不能改成/var/www/static 訪問http://IP:PORT/static/index.html時,實際訪問的是/var/www/static/index.html 這種實現,類似 基於springboot配置類
基於配置root
location /static/ {
root /var/www/;
}
root會把指定路徑拼接到文件路徑後,再進行訪問
注意:location中指定的/static/必須是在root指定的/var/www/目錄中真實存在的。 通過瀏覽器訪問http://127.0.0.1:7001/static/t.txt,則訪問服務器的文件是/var/www/static/t.txt
項目例子:
https://github.com/krycai/Allen-projects/tree/master/allen-upload
講解比較詳細的例子:https://www.javatt.com/p/11507