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

2014-05-04 16:08:59 +08:00
 magine
最近在写一个用xls更新数据库内容的东西,想要限定只能上传*.xls。
10781 次点击
所在节点    Django
22 条回复
ddyy
2014-05-04 16:10:39 +08:00
这种问题还用问吗?就像问“有没有一种库能计算出1+1等于几?”
guoqiao
2014-05-04 16:21:29 +08:00
要求不高的话, 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
2014-05-04 16:31:42 +08:00
别人的问题,如果知道就友好地回复,特别讨厌那些对小白问题不屑一答的回复者,若你觉得回答简单问题会影响你高大上的形象,那你大可不必回复,没有必要在别人不懂恰好自己有点懂的或者以为自己懂的地方自我感觉良好。
xbonline
2014-05-04 16:56:45 +08:00
呵呵 同意楼上
fanzeyi
2014-05-04 17:38:45 +08:00
wangyongbo
2014-05-04 17:40:45 +08:00
我觉得其实没必要判断,简单的看一下扩展名对不对,就行了。
你肯定是要从xls文件读取内容的,无论用的什么方法,能读出来内容就算格式正确,读不出来就是格式错误。在读内容的时候 加一个 try... except...
可以不
kxxoling
2014-05-04 18:54:20 +08:00
magine
2014-05-04 19:14:12 +08:00
@wangyongbo
我现在是用的这种方法。
写完了修改代码时想要给用户一个详细的错误原因,所以才想能不能判断一下上传文件类型。
之前学长说可以调用linux的file指令。
magine
2014-05-04 19:17:27 +08:00
@kxxoling
正在研究,多谢了。
magine
2014-05-04 19:24:17 +08:00
@fanzeyi
看了一下,这个比直接调用file还要简单!谢谢了。
loading
2014-05-04 19:25:08 +08:00
@ddyy 已block,不谢
Debiancc
2014-05-04 21:31:57 +08:00
mime啊,亲
WildCat
2014-05-04 23:38:46 +08:00
@ddyy 同Block。正如 @HoHo 所说,如果你不屑一顾可以不回复。秀优越感可以去别处,这里不欢迎你。
qdcanyun
2014-05-04 23:59:54 +08:00
可以试下python-magic
znetor
2014-05-05 00:55:25 +08:00
@loading 我感觉 除了要知道怎么提问题外,大家还有必要学习如何回答问题
wuyazi
2014-05-05 09:03:03 +08:00
magic+1
shuson
2014-05-05 09:36:40 +08:00
另一种思路,在上传前用js判断文件后缀名类型(不能防止恶意用户)
lu18887
2014-05-05 13:05:13 +08:00
首先要看你的这个需求是出于什么考虑,是控制用户上传恶意文件还是只是限制用户上传某类文件(比如只允许传某种格式的图片)。
如果是防止恶意文件上传,我首先考虑的做法是把上传的文件的属性改成只读就可以了。(上传之后,后端控制)
如果是限制上传的文件类型,就放在前端(没有上传文件之前)控制,总不能用户上传完了你再提示用户不支持该格式吧……
magine
2014-05-05 23:42:14 +08:00
@lu18887
最后一句很受教,决定写JS解决了QAQ
rcmerci
2014-07-06 13:40:12 +08:00
@HoHo 同意

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/111099

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX