V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
magine
V2EX  ›  Django

Django 或者说 Python 有没有办法判断用户上传的文件类型?

  •  
  •   magine ·
    Ma233 · 2014-05-04 16:08:59 +08:00 · 10522 次点击
    这是一个创建于 3645 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在写一个用xls更新数据库内容的东西,想要限定只能上传*.xls。
    22 条回复    2017-12-05 16:23:01 +08:00
    ddyy
        1
    ddyy  
       2014-05-04 16:10:39 +08:00
    这种问题还用问吗?就像问“有没有一种库能计算出1+1等于几?”
    guoqiao
        2
    guoqiao  
       2014-05-04 16:21:29 +08:00   ❤️ 1
    要求不高的话, form里加个clean方法即可:

    def clean_xls(self):
    xls = self.cleaned_data['xls']
    if not xls.name.endswith('.xls'):
    raise forms.ValidationError('xls only')
    return xls

    当然,这样不能防止别人故意改后缀.
    HoHo
        3
    HoHo  
       2014-05-04 16:31:42 +08:00   ❤️ 6
    别人的问题,如果知道就友好地回复,特别讨厌那些对小白问题不屑一答的回复者,若你觉得回答简单问题会影响你高大上的形象,那你大可不必回复,没有必要在别人不懂恰好自己有点懂的或者以为自己懂的地方自我感觉良好。
    xbonline
        4
    xbonline  
       2014-05-04 16:56:45 +08:00
    呵呵 同意楼上
    fanzeyi
        5
    fanzeyi  
       2014-05-04 17:38:45 +08:00   ❤️ 3
    wangyongbo
        6
    wangyongbo  
       2014-05-04 17:40:45 +08:00
    我觉得其实没必要判断,简单的看一下扩展名对不对,就行了。
    你肯定是要从xls文件读取内容的,无论用的什么方法,能读出来内容就算格式正确,读不出来就是格式错误。在读内容的时候 加一个 try... except...
    可以不
    kxxoling
        7
    kxxoling  
       2014-05-04 18:54:20 +08:00   ❤️ 1
    magine
        8
    magine  
    OP
       2014-05-04 19:14:12 +08:00
    @wangyongbo
    我现在是用的这种方法。
    写完了修改代码时想要给用户一个详细的错误原因,所以才想能不能判断一下上传文件类型。
    之前学长说可以调用linux的file指令。
    magine
        9
    magine  
    OP
       2014-05-04 19:17:27 +08:00
    @kxxoling
    正在研究,多谢了。
    magine
        10
    magine  
    OP
       2014-05-04 19:24:17 +08:00
    @fanzeyi
    看了一下,这个比直接调用file还要简单!谢谢了。
    loading
        11
    loading  
       2014-05-04 19:25:08 +08:00 via Android   ❤️ 1
    @ddyy 已block,不谢
    Debiancc
        12
    Debiancc  
       2014-05-04 21:31:57 +08:00
    mime啊,亲
    WildCat
        13
    WildCat  
       2014-05-04 23:38:46 +08:00 via iPhone
    @ddyy 同Block。正如 @HoHo 所说,如果你不屑一顾可以不回复。秀优越感可以去别处,这里不欢迎你。
    qdcanyun
        14
    qdcanyun  
       2014-05-04 23:59:54 +08:00
    可以试下python-magic
    znetor
        15
    znetor  
       2014-05-05 00:55:25 +08:00   ❤️ 1
    @loading 我感觉 除了要知道怎么提问题外,大家还有必要学习如何回答问题
    wuyazi
        16
    wuyazi  
       2014-05-05 09:03:03 +08:00
    magic+1
    shuson
        17
    shuson  
       2014-05-05 09:36:40 +08:00   ❤️ 1
    另一种思路,在上传前用js判断文件后缀名类型(不能防止恶意用户)
    lu18887
        18
    lu18887  
       2014-05-05 13:05:13 +08:00   ❤️ 1
    首先要看你的这个需求是出于什么考虑,是控制用户上传恶意文件还是只是限制用户上传某类文件(比如只允许传某种格式的图片)。
    如果是防止恶意文件上传,我首先考虑的做法是把上传的文件的属性改成只读就可以了。(上传之后,后端控制)
    如果是限制上传的文件类型,就放在前端(没有上传文件之前)控制,总不能用户上传完了你再提示用户不支持该格式吧……
    magine
        19
    magine  
    OP
       2014-05-05 23:42:14 +08:00
    @lu18887
    最后一句很受教,决定写JS解决了QAQ
    rcmerci
        20
    rcmerci  
       2014-07-06 13:40:12 +08:00
    @HoHo 同意
    bravecarrot
        21
    bravecarrot  
       2015-02-02 00:13:00 +08:00
    @magine 从长远来看,建议不要这样做,来自客户端的数据都是不能完全信任的,客户端验证不靠谱。
    2805408253
        22
    2805408253  
       2017-12-05 16:23:01 +08:00
    @bravecarrot 先前端 js 验证,后端同时也要验证(你懂得)。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2874 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 07:16 · PVG 15:16 · LAX 00:16 · JFK 03:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.