很早以前的單應用項目上傳圖片都是很簡單的,上傳圖片后在controller層設置路徑並且保存到服務器的某個路徑下就行了,數據庫中存儲路徑地址,最后在tomcat中設置一個虛擬路徑就行了,很多年以前大多都是這么做的。
然而隨着技術的更新迭代,SOA,微服務,這樣的做法是會被淘汰的,如果是分布式部署或者集群環境,上傳文件到各自的服務器上去,是無法做到統一的,那么就要用到圖片服務器,之前我有提過fastdfs,這個是一個非常好用的文件服務器,這里不多說了。各個項目上傳的圖片都統一由文件服務器來管理,那么以后不論在分布式環境下或者集群環境下,根據分配的路徑去訪問就可以獲得圖片即可。
1、使用文件流來處理,這個結果這樣做可以同時被瀏覽器,ios以及安卓調用,從MultipartHttpServletRequest中獲取MultipartFile對象即可,最后再調用文件服務器的接口上傳即可
2、使用base64上傳
切割圖片后可以生產一堆base64字符串,這個字符串就是你要上傳的圖片,只要把這個字符串傳到后台去解碼處理即可,最終在使用fastdfs來上傳就行
那么這兩種方式有什么區別呢?
1、訪問文件流圖片需要2次HTTP請求,而BASE64只需要一次
2、文件流圖片在任何瀏覽器都可以被訪問到,而base64某些瀏覽器不支持
3、base64圖片無法緩存(緩存整頁另當別論)
4、base64編碼的圖片相對偏大,所以一般都是用來做小圖的,比如頭像
用處:
文件流用來上傳大圖,比如一些廣告圖片啊,商品圖片等等
base64圖片可以用來上傳用戶頭像,或者小的logo,或者小的圖標等等
base64可以保存到數據庫,而不需求上傳,但是我不推薦這么做,圖片都應該統一在文件服務器中管理,當然這個看需求設計了