圖片上傳-下載-刪除等圖片管理的若干經驗總結
圖片上傳功能很常見,很多人都覺得這個功能很簡單,隨著要求的提高,這個圖片小系統也真是複雜啊。
需求1:
上傳,未了達到“大容量儲存”、“負載均衡”、“效能好”,“有技術含量”等裝逼需求,採用了Fastdfs。
注:FastDFS是一個開源的輕量級分散式檔案系統,它對檔案進行管理。
功能包括:檔案儲存、檔案同步、檔案訪問(檔案上傳、檔案下載)等,解決了大容量儲存和負載均衡的問題。
特別適合以檔案為載體的線上服務,如相簿網站、視訊網站等等。
上傳,以為只是一個“上傳”功能,細想一下,不是的哦~
上傳的時候,需要考慮那些臨時的或者不再使用的圖片。
場景1:臨時的,但沒有後續操作。
比如,使用者選擇了新的頭像,試試預覽效果,但是最後沒有儲存,直接離開了網站。
解決辦法:如果用了Fastdfs,可以在上傳的時候,就存到資料庫,做個標記。
後面儲存了,就更新下狀態。在合適的時候,檢查下狀態,把狀態不合適的圖片刪掉,物理刪除。
場景2:臨時的,有後續操作。
這是比較的場景。
場景3:之前的,需要刪除。
比如,使用者儲存了新的頭像。
之前的頭像,可以物理刪除,也可以邏輯刪除。
需求2:顯示和下載。
可以在Nginx中配置,Fastdfs。
需求3:刪除
有些圖片,可能不需要了,要能夠刪除。
fastdfs有提供介面。
2種解決方案
單一業務場景
使用者上傳頭像,是其中的1種業務場景,而且是一種比較簡單的場景。通常來說,使用者頭像就是1個圖。
實際情況中,還存在多個圖的情況。比如專案Project,可以有多個圖片。
在上傳的時候,可以有多個圖。
增加專案Project的時候,可以直接insert所有的圖。
但是在更新專案Project的時候,需要區分insert、update、delete3種。
a.把不再使用的圖片標記出來,如果是邏輯刪除,今後可以根據標記做出物理刪除。
如果是物理刪除,直接幹掉。
b.需要更新的。
根據id更新。
c.需要插入的。
怎麼找出這3種圖?
增加的時候:都是insert
更新的時候:insert、update、delete都有可能存在
輸入:
儲存的時候,傳過來N張圖,假定為A集合:a.png、c.png、d.png。
資料庫存在的N張圖,假定為B集合:a.png、b.png、c.png
delete:B集合中,不在A中的元素,結果為b.png(高中數學集合怎麼表示來著~)
update:同時存在A和B中的元素,a.png,b.png
insert:在A中,但不在B中的元素,c.png,d.png
多種業務場景
一般的系統,會有多個地方用到圖片,比如使用者頭像、使用者相簿、專案的圖片等。
可以針對每個業務場景,考慮圖片的增加-修改-刪除操作。
我想,也可以採用整體的解決辦法。
2步走
第1步:上傳圖片的時候,只做insert操作,把之前的圖片標記為“已刪除”。
或者部分insert,部分update。
第2步:找出那些需要刪除的圖片,物理刪除或邏輯刪除。
所有圖片上傳,都經過fastdfs,理論上可以查詢出所有存在的物理圖片,這是圖片的“全集”S。
如果不支援,那麼在上傳圖片的介面中,增加儲存到資料庫(單獨一張表)的程式碼。
統計所有業務場景,正在使用的圖片集合U,邏輯刪除的圖片集合V。
新建一張表P:
a.把邏輯刪除集合V中的,分佈在多個表的圖片資料,統一放到P表。
b.S-U-V,就是所有需要物理刪除的圖片資料,統一放到P表。
比如臨時上傳的這種圖片。
最後,給操作員1個統一的圖片刪除介面。物理刪除的,直接執行Fastdfs刪除。
邏輯刪除的,變為物理刪除的,把資料庫表的物理刪除,Fastdfs刪除。
以上屬於個人總結,鑑於實際情況,採用了單一業務場景的方案。
其實我更想使用多種業務場景的全域性解決方案。
小雷FansUnion
2015年10月26日
湖北-武漢-循禮門
微信:FansUnion
QQ:240370818
小雷FansUnion
2015年10月26日
湖北-武漢-循禮門
微信:FansUnion
QQ:240370818
相關文章
- 圖片上傳-下載-刪除等圖片管理的若干經驗總結2
- 圖片上傳-下載-刪除等圖片管理的若干經驗總結3-單一業務場景的完整解決方案
- java,springboot + thymeleaf 上傳圖片、刪除圖片到伺服器、本地,壓縮圖片上傳(有些圖片會失真),原圖上傳JavaSpring Boot伺服器
- 道歉,上傳的檔案或圖片等資料被刪除
- javascript圖片上傳格式尺寸等特徵驗證效果JavaScript特徵
- 上傳圖片
- 圖片上傳及圖片處理
- 直播系統搭建,插入圖片、刪除圖片、設定圖片大小
- php圖片上傳之圖片轉換PHP
- 基於業務場景下的圖片/檔案上傳方案總結
- Retrofit+RxJava上傳圖片上傳圖片到後臺RxJava
- elementUI中form表單的upload上傳圖片及校驗總結UIORM
- 【easyui 】上傳圖片UI
- 上傳圖片jsJS
- kindeditor 圖片管理增加刪除操作按鈕
- php 非同步上傳圖片幾種方法總結PHP非同步
- 使用 canvas 繪製圖片,然後下載、上傳Canvas
- vue 上傳圖片進行壓縮圖片Vue
- PbootCMS上傳圖片變模糊、上傳圖片尺寸受限的解決方案boot
- Excel 刪除圖片小技巧Excel
- curl上傳圖片的大坑
- 【微信小程式雲開發】1分鐘學會實現上傳、下載、預覽、刪除圖片,並且以九宮格展示圖片微信小程式
- js封裝,常用ajax刪除和手機驗證,上傳圖片的方法,基於layerJS封裝
- 多圖片formpost上傳ORM
- input file圖片上傳
- PHP上傳圖片類PHP
- 圖片檔案上傳
- 測試圖片上傳
- [python][flask] Flask 圖片上傳與下載例子(支援漂亮的拖拽上傳)PythonFlask
- web技術分享| 圖片上傳與圖片裁剪結合 vue3WebVue
- APP開發者利器!騰訊雲“永珍圖片”實現圖片上傳下載率高達99.9%APP
- 自定義上傳圖片拼圖遊戲遊戲
- ci框架中的圖片上傳框架
- mino如何上傳同名的圖片
- 菜鳥學JS(一)——上傳圖片之上傳前預覽圖片JS
- Ueditor 上傳圖片自動新增水印(只能上傳圖片,上傳檔案報錯)
- Android處理圖片OOM的若干方法小結AndroidOOM
- Laravel 使用 FastDFS 上傳圖片LaravelAST