用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、其实沿着这种思路下去,可以继续扩展,做一个类似云盘的东西,现在缺少的就是创建目录、重命名、移动文件之类的,如果有需要我会继续扩展,思路跟之前删除打开一样,应该没什么难点

效果图贴一下

用Flask 实现文件服务器(包含docker版本)第1张

用Flask 实现文件服务器(包含docker版本)第2张

用Flask 实现文件服务器(包含docker版本)第3张

免责声明:文章转载自《用Flask 实现文件服务器(包含docker版本)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Navicat 15.0.12 版本 激活教程Kubernetes中利用Kubectl set 让Deployment更新镜像下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

CentOS 7 64位

1.查看Ip: ip addr 以前记得使用的是 ifconfig       这里提示没有发现命令      使用 ip addr 出现了上边的结果。系统刚刚在虚拟机中装好,所以显示的是上边的结果。但是出现了ip: 127.0.0.1 2.修改ip配置,联网 vi /etc/sysconfig/network-scripts/ifcfg-e...

Docker实践

1.1 实验环境 本教程实验环境:ubuntu16.04 64位 。 1.2 docker 安装 可以参考菜鸟教程安转完成后启动docker 1 sudo service docker start 运行docker默认的hello-world程序 1 sudo docker run hello-world 运行界面如下,说明docker安转成功...

Flask入门学习——蓝图Blueprint

flask蓝图可以实现应用程序的模块化,即通常作用于相同的url前缀,eg:/user/id,/user/profile等类似这样,可以放在一个模块当中,这样会让应用更加清晰便于开发与维护。 这里有个例子:(来源:Python web开发实战-董伟明) 模块user.py: from flask import Blueprint bp = Bluepri...

Docker中运行redis报错误: Failed opening the RDB file root (in server root dir /etc/cron.d) for saving: Permission denied

错误信息: 1:M 23 Dec 2021 19:53:02.058 * Background saving started by pid 1848 1848:C 23 Dec 2021 19:53:02.058 # Failed opening the RDB file backup.db (in server root dir /etc) for sa...

Structure needs cleaning(结构需要清理)解决

现象:在对docker容器进行删除或文件时提示无法删除,结构需要清理 解决方法: 1.docker容器: 停止docker服务,卸载文件系统,进行文件修复,由于使用的是ext4格式,所以使用 fsck.ext4 这里的挂载目录是 /dev/mapper/dockervg-dockerlv ,完整修复命令为 fsck.ext4 /dev/mapper/doc...

LXD 2.0 系列(七):LXD 中的 Docker

这是 LXD 2.0 系列介绍文章的第七篇。 LXD 入门 安装与配置 你的第一个 LXD 容器 资源控制 镜像管理 远程主机及容器迁移 LXD 中的 Docker LXD 中的 LXD 实时迁移 LXD 和 Juju LXD 和 OpenStack 调试,及给 LXD 做贡献 为什么在 LXD 中运行 Docker 正如我在系列的第一篇中简要介绍的,...