Flask文件上传的注意点

最近在写文件上传接口,这篇文章主要记录下文件上传注意的几个方面。

文件类型

一般的文件上传接口都是指定特定的文件才能允许上传,如图片类型支持jpg,png,tif,gif,pcx,tga,exif,fpx,svg等等,所以需要判断用户上传的文件是否满足要求,不能需要图片类型文件,而用户上传MP4的文件。具体检测方法如下:
首先需要将允许上传的文件类型存储在一个列表中,将用户上传的文件分割出文件后缀,进行判断。

1
# 判断文件后缀是否在列表中
2
def allowed_file(filename, ALLOWED_EXTENSIONS):
3
    return '.' in filename and filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS

文件大小

文件大小也是需要判断的,规定用户上传文件的大小,如果恶意用户随意上传大文件,会占据大量带宽,影响服务器运行。首先也需要设定允许上传最大文件大小。

1
def file_len(filename_context):
2
    '''
3
    判断文件大小是否满足配置
4
    :param filename:文件内容
5
    :return: bool
6
    '''
7
    size = len(filename_context)
8
    if size > current_app.config['ALLOW_SIZE']:
9
        return False
10
    else:
11
        return True

文件重命名

用户文件重新命名也是非常重要的,防治恶意用户上传后门进行连接,二来可以统一下存储文件的命名格式,防止不规范的文件名称的出现。uuid既可以保证格式一样,还能保证文件名不重复。

1
from shortuuid import uuid
2
def rename(name):
3
    '''
4
    重构名字的格式
5
    保存的文件的命名为:uuid
6
    :param name:
7
    :return:
8
    '''
9
    name1 = name.split('.')[-1]
10
    new_name = uuid() +  '.' +name1
11
    return new_name