django检查上传的文件是否是zip文件

时间:2017-03-30 14:08:45

标签: python django zip zipfile

我在Django中有一个POST方法的处理程序,它接收一个上传的文件。我想要做的是在继续之前验证该文件是否是有效的zip文件。

所以,我有:

@login_required(login_url="login/")
def upload(request):
    if request.method == 'POST' and request.FILES['upload_file']:
        uploaded_file = request.FILES['upload_file']
        print type(uploaded_file)

    return render(request, 'upload.html', {'context': RequestContext(request)})

此时此uploaded_file的类型为<class 'django.core.files.uploadedfile.InMemoryUploadedFile'>。我的问题是,验证这是一个有效的存档的最佳方法是什么?我是否需要将其保存到磁盘然后使用zipfile模块,或者有没有办法在不写入磁盘的情况下执行此操作?

注意:由于各种不相关的原因,我没有将Django模型与FileField和相应的Form一起使用。

2 个答案:

答案 0 :(得分:6)

是的,您应该使用zipfile模块。

zipfile.is_zipfile(filename)

如果filename是基于其幻数的有效ZIP文件,则返回True,否则返回False。 filename也可以是文件或类文件对象。 (在3.1版中更改:支持文件和类文件对象。)

另一种选择:(不太可能,但你的选择)

How to detect type of compression used on the file? (if no file extension is specified)

您可以在说明中找到标题格式:

Zip(.zip)格式描述,以0x50,0x4b,0x03,0x04开头(除非为空 - 然后最后两个是0x05,0x06或0x06,0x06)

答案 1 :(得分:0)

保存pbject的文件名

Name = request.FILES['filename'].name

然后检查是否是zip文件

If Name.endswith('.zip'):
     print(True)