求批判]一个内网用的文件中转系统的想法 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
hezhile
V2EX    Python

求批判]一个内网用的文件中转系统的想法

  •  
  •   hezhile 2017-07-21 16:34:39 +08:00 5270 次点击
    这是一个创建于 3008 天前的主题,其中的信息可能已经有所发展或是发生改变。

    个人背景

    本科学过一点计算机应用的科目,接触过一点 VBA 和 python 的编程知识,软件开发属于民科+菜鸟水平。

    用户需求

    公司分好几个部门,分布在不同地理位置,内网没有 ftp 服务,也没有跨部门的文件共享服务。大部分的内网用户不能访问互联网,但全部用户都可以访问 21cn 的企业邮箱(容量只有 4M )。想发大的文件给别的部门的同事,只能提前通知对方清理邮箱或者发到私人邮箱。

    战略层

    计划用 django 开发一个文件的中转系统,让用户上传文件,生成下载链接。用户把下载链接通过邮件发给收件人,对方点击链接就可以下载文件。 架构大概是 freebsd + python + django + uwsgi + nginx

    这一层考虑的意外情况有: 1、文件同名 文件上传时,对“日期+文件名”用 hashlib 库做 10 bit 的 blake2b digest,得到的字符串作为文件的唯一 id,也是储存在服务器目录的文件名。下载链接是 http://IP-ADDRESS/app/get/file-id,然后 django 从数据库查到文件上传时候的名字和实际储存的路径,再传递给 nginx,nginx 在把储存的文件重命名提供给用户。

    2、文件内容重复 每天下班之后,django 跑一个后台程序,对储存在服务器的文件,未有 hash 值的,做 hash。发现相同 hash 值的文件的话,将新上传的文件的物理储存路径改为已有的文件,删除掉新上传的文件。用户下载的时候可以下载到正确的文件名和内容,系统的储存空间也不会浪费。当然,只有在用户大量上传文件,导致储存空间不够用的时候才需要清理重复的文件。

    3、用户上传和下载大文件,占用跨部门网络链接的带宽 部门内部是百兆到桌面,服务器部署在部门 A,部门 A 的对外链接只有 6M 带宽。针对来自不同部门的用户进行上传和下载的限速。限速功能实现之前,通过文字提醒用户不要上传下载超过 200M 的文件。

    功能层

    1.0 版本: 在首页展示使用说明 接受上传文件 操作日志存入数据库 按日期倒序,展示同一 ip 上传的文件列表,可以删除 通过链接可以下载

    2.0 版本: 限速 搜索 管理员页面,可以删除任何文件

    3.0 版本: 各种统计信息,访问量、文件数量、下载次数等等 上传的进度条

    由于没有什么知识和经验,总是担心这些粗浅的想法有错漏,希望各位高手不吝赐教,谢谢!

    25 条回复    2017-07-22 15:34:14 +08:00
    scriptB0y
        1
    scriptB0y  
       2017-07-21 16:43:51 +08:00   1
    兄弟,听你的描述,你说的莫不是这宝贝?

    https://owncloud.org/
    hezhile
        2
    hezhile  
    OP
       2017-07-21 16:59:13 +08:00
    @scriptB0y
    谢谢。
    不过我们大部分电脑配置都很低,还在跑 win xp 和 IE6。用 owncloud 还有用户培训的问题,我只是部门 A 的小兵,很难培训其它部门的用户。
    coolyujiyu
        3
    coolyujiyu  
       2017-07-21 17:28:43 +08:00   1
    owncloud 真不用培训,和用百度网盘一样
    想法不错,可是用链接来传递真的好吗?这样子很多人没法对自己的文件进行管理
    realpg
        4
    realpg  
    PRO
       2017-07-21 17:32:31 +08:00   1
    我觉得你们只需要一个内阿旺 ftp 服务器……
    akrf
        5
    akrf  
       2017-07-21 17:34:01 +08:00 via Android   1
    建一个 ftp 最简单
    ryanzyy
        6
    ryanzyy  
       2017-07-21 17:41:11 +08:00   1
    看了你写的企划不觉得你是菜鸟水平
    但是 为什么不直接购买一台 Windows Server (或运行你的 FreeBSD )然后逐个电脑配置网络共享
    fqzz
        7
    fqzz  
       2017-07-21 18:30:35 +08:00   1
    4M 的邮箱感觉是上古时代的东西。
    mooncakejs
        8
    mooncakejs  
       2017-07-21 18:48:21 +08:00   1
    感觉还不如 ftp。。。
    l00t
        9
    l00t  
       2017-07-21 18:52:23 +08:00   1
    可以内网架一个飞秋 FeiQ, 传文件,开共享,外加还能聊聊天。
    kekeones
        10
    kekeones  
       2017-07-21 18:54:23 +08:00 via iPhone   1
    群辉
    gdsing
        11
    gdsing  
       2017-07-21 19:07:12 +08:00   1
    带宽太低,如果同时多几个人上传或下载。你部门的带宽就全占了。所以需要一个带文件传输功能的内网即时聊天软件。
    qile1
        12
    qile1  
       2017-07-21 19:12:49 +08:00 via Android   1
    @akrf
    ftp 传中文文件有时候会有问题
    zzj0311
        13
    zzj0311  
       2017-07-21 21:18:42 +08:00 via Android   1
    win server - windows 并不会有编码问题(
    johnnie502
        14
    johnnie502  
       2017-07-21 21:27:11 +08:00   2
    拿着锤子看什么都像钉子。owncloud 需要培训,你写的系统就不需要吗
    UnknownR
        15
    UnknownR  
       2017-07-21 22:27:44 +08:00   1
    SMB 企不是美哉,还有你说的地理位置是多大的跨度?一般国内跨度的话问题都不大,看你的描述,文件容量也不大,通过 AD 创建部门组,按部门分文件夹,按子文件夹设置权限,总的按部门给访问权限,细的可以手动在 AD 里添加,免去了在 server 上更改
    sdshiyan2005
        16
    sdshiyan2005  
       2017-07-21 22:36:41 +08:00   1
    seafile 也挺好用的啊
    azh7138m
        17
    azh7138m  
       2017-07-21 22:47:06 +08:00 via Android   1
    @qile1 这要看多大,我们学校以前资源站用 flashfxp 传,5G 文件妥妥的没问题
    lerry
        18
    lerry  
       2017-07-21 22:48:21 +08:00   1
    filezilla 分分钟搭建一个 FTP
    不过程序员都喜欢造轮子,折腾呗
    littlewey
        19
    littlewey  
       2017-07-22 01:44:10 +08:00 via iPhone   1
    minio
    hezhile
        20
    hezhile  
    OP
       2017-07-22 02:07:05 +08:00
    @coolyujiyu
    每个用户都只能看到自己电脑上传的文件 也可以删除已经上传的文件

    @UnknownR
    我们的内网没有建立 windows 域

    谢谢大家的回复 大部分人都推荐基于 FTP 的方案 我们会再仔细考虑的
    slowgen
        21
    slowgen  
       2017-07-22 11:02:09 +08:00
    感觉 kodexplorer 可以满足需求
    realpg
        22
    realpg  
    PRO
       2017-07-22 12:04:53 +08:00
    @qile1
    你自己不会配而已。

    @hezhile
    这还考虑啥,搭个 FTP SERVER 不是 10 分钟的事儿……
    ksupertu
        23
    ksupertu  
       2017-07-22 12:06:07 +08:00 via iPhone
    div class="reply_content">seafile 不也可以,也是 django 的
    CryMeatel
        24
    CryMeatel  
       2017-07-22 14:45:09 +08:00 via Android
    。。。那么麻烦干嘛,samba 就好啦
    langjiyuan
        25
    langjiyuan  
       2017-07-22 15:34:14 +08:00
    飞秋 满足不了吗?文件加密 当我没说 ///
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1071 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 47ms UTC 23:11 PVG 07:11 LAX 16:11 JFK 19:11
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86