一、數據庫存儲
直接把圖片的二進制碼存到數據庫,可參考blog:http://blog.csdn.net/hope2jiang/article/details/590733
直接存圖片在mysql上面有兩點好處:
1.比較容易做取重,就是相同的圖片只存一份.
2.最重要備份使用數據庫的備份方式簡單.
3.容易管理,去掉無用的圖片等.
缺點:
1.不適合超大量存儲,數據的存儲越大,恢復越麻煩
2.當然一般還是需要前端做更多的物理緩存,而不是靠mysql來直接輸出.
還是看需求,如果圖片是小圖片,像論壇使用的,並且需要注重他的優點的可以使用,至於量沒有具體的,你要想想如果數據庫遇到問題,
它的重做和遷移是否方便的問題.其實如果不是特殊情況一般存在數據庫里都不是好的選擇.平衡他的優缺點.
二、webRoot下存儲
利用上床組件把圖片上傳到web項目下,再存儲圖片的相對路徑到數據庫表中,需生成一個新的不會重復的圖片名
缺點:顯而易見重新部署項目前需要重新把已上傳的圖片備份,待部署成功后拷貝到web項目下
三、web項目外存儲
顧名思義,把圖片上傳到web目錄外
1.建立存放圖片的目錄和web項目下一目錄之間的聯系
例如:①Linux系統下,首先把圖片上傳到項目外一目錄;
②然后把此目錄掛載到項目內某一目錄下mount --bind 實際存放圖片目錄項目內某一目錄;
③然后把上傳圖片的相對路徑存儲到數據庫表中;
④最后在項目中直接訪問這個URL獲取圖片。
注意:第一存放圖片的目錄需有上傳權限;
第二在重新部署時,undeploy前先解除掛載umount 實際存放圖片目錄項目內某一目錄;
待項目上傳成功后再重新建立掛載,否則在undeploy時可能丟失已上傳的圖片。
缺點:每次部署前后要進行掛載,解掛載操作,易誤操作丟失資源
2.配置虛擬路徑
例如使用tomcat時:
首先把圖片上傳到項目外一目錄下;然后在tomcat中配置一個虛擬路徑指向上傳目錄命名為 "/fileUpload" (在/conf/server.xml下配置Context即可);
然后把上傳圖片的相對路徑存儲到數據庫表中,再在程序中通過訪問這個虛擬路徑 "/fileUpload" + 數據庫中存儲的相對URL 來獲取文件資源;
(其實相當於在tomcat下重新啟動了一個web項目,然后通過訪問此web項目下的圖片資源,
這樣其實也可以通過 http://ip:port/webProject/ resourse)。
解決:可以使用tomcat的配置文件將某個請求映射到物理路徑下 ,完成圖片的回顯。
例子:
1.修改tomcat的配置文件(window環境),
首先找到tomcat目錄下conf目錄下的server.xml文件,
在server.xml文件中找到<Host></Host>;
然后在其中加上這
<Context path=
"/uploadfile"
docBase=
"D:\File\imager"
></Context>。
如:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log."
suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> <!-- 下面兩條主要是tomcat轉發圖片請求到相應的電腦物理磁盤位置 --> <Context path="/uploadfile" docBase="D:\File\imager"></Context> </Host>
tomcat在的請求一般為:http:
//localhost:8080/uploadfile/abc.jpg。配置完重啟之后,該請求
自動跳轉到物理路徑D:\File\imager下查找。
會訪問本機的D:\File\imager\abc.jpg。
注意:在啟動完tomcat后會報路徑“D:\File\imager”找不到的bug,這是因為:tomcat不會自動幫您創建相關的文件路徑,需要我們自己先創建好相應的文件路徑。
轉載自:http://blog.csdn.net/u014305991/article/details/42431369