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 · 4869 次点击
    这是一个创建于 2711 天前的主题,其中的信息可能已经有所发展或是发生改变。

    个人背景

    本科学过一点计算机应用的科目,接触过一点 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  
       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 的方案 我们会再仔细考虑的
    shuimugan
        21
    shuimugan  
       2017-07-22 11:02:09 +08:00
    感觉 kodexplorer 可以满足需求
    realpg
        22
    realpg  
       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
    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   ·   实用小工具   ·   5244 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 05:43 · PVG 13:43 · LAX 21:43 · JFK 00:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.