用Flask 實現文件服務器(包含docker版本)


最近有了公司局域網內共享axure原型的需求,所以用Flask開發了一款文件上傳/查看工具,記錄一下其中的問題和解決方案

這個工具參照了一位大神的uploads工具 https://zhuanlan.zhihu.com/p/24429519?refer=flask,保留了其初始架構,之后對功能做了較大的改動

改動后的工具在這里,有需要的同學可以參考:

https://github.com/shuchengxiang/Uploads

docker版本見這里:

https://hub.docker.com/r/shuchengxiang/files-server

回歸本意,記錄歷程:

需求由來:

      axure生成的文件是完整的網頁文件,所以本想直接把文件掛在靜態服務器上就可以了,很方便,但后來想到這樣就只能讓我自己來傳,有些麻煩,所以想做些改變。之后覺得結合svn讓大家都能傳到那個靜態目錄下就可以了,這樣也比較有python思想,又發現大家用的windows和蘋果在上傳工具上還稍有區別,不好統一,最后覺得應該開發一款基於瀏覽器的工具

記錄一下思路:

1、我最終想要一個類似於靜態服務器的那種,可以一級一級打開目錄和管理的網站,發現實現起來還是要自己思考,經過實踐的解決方案是,路由用path類型的點擊時加上文件名傳給后台,后台讀出該目錄的文件或文件夾的列表,返回給前台就可以了,具體可以參考我的代碼,實現之后就解決了大問題。用某個包的時候一定要看官方文檔,自己體會這樣是較快的上手方式。

2、本來想要上傳文件夾,但是實踐發現,上傳文件夾的話,沒有保留其目錄結構,后來思考后覺得可以上傳zip壓縮包,上傳后后台自己解壓就可以了,也有其方便之處,不過zipfile模塊解壓出來的東西,編碼不太正確,查資料說可以改源碼,但是覺得改源碼的話每次安裝部署都要單獨改呀,所以就用了個笨方法-解壓出來之后再便利文件夾重命名,雖然挺笨的但上傳目錄不是特別復雜的話也不太影響效率

3、思路上捋順了,實現上並沒有什么難點,遇到的是一些小細節的問題,比如路由路徑結尾的/,目錄應該有而文件不應該有;后台os模塊重命名需要切換目錄,命名完之后還要切回來,否則刪除文件會提示被占用;代碼中路徑盡量用os.path.join(),用斜杠來拼路徑部署在windows和Linux上會有問題等等,慢慢解決之后,工具也就成型了

4、其實沿着這種思路下去,可以繼續擴展,做一個類似雲盤的東西,現在缺少的就是創建目錄、重命名、移動文件之類的,如果有需要我會繼續擴展,思路跟之前刪除打開一樣,應該沒什么難點

效果圖貼一下

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM