Django如何更改前端传入文件的名称? ٩( ‘ω‘ )و Django 问题

243 阅读2分钟

文章目录

问题描述

当前网上搜索Django修改文件名称,大多数只能找修改图片名称的,而且很多都是从settings.py修改,还有一些说改storage.py。非常麻烦不说,而且可能还无法满足我们的需要,比如我要把文件名称不单改成当前时间,还要添加用户的一些特征信息,比如id,昵称等,上述的方法就十分不便。

解决方案

首先我们根据需要先取出文件的后缀名。因为我重命名的方式并不会保留文件后缀名。
取出文件后缀名的方式有很多种,下面我是使用split先把字符串拆分,在去最后一个.后面的字母,但是如果你可能碰到一些多后缀的文件(比如说.tar.gz)这种方式就不那么试用了,可以直接改写下面方法或者自行想办法取出即可。
在这里插入图片描述
上述截图,因为需要实现一些需求,写的比较复杂,核心改名的代码就下面三行。就是取出文件后缀,设置新文件名,在新文件名后添加后缀,然后在赋值给.name,即可。

# 取出文件后缀名,这里前端给我传的文件key为`文件`,大部分默认文件key为`file`
文件后缀 = str(request.FILES.get('文件').name).split('.')[-1]
# 设置文件名`用户特征信息`是我自己定义的变量,你可以在这里设置你需要传入的变量
文件名称 = f"{用户特征信息}_上传时间:{datetime.datetime.now().strftime('%Y年%m月%d日%H时%M分%S秒%f微秒')}.{文件后缀}"
# 修改文件名直接让文件.name等于新的文件名即可
request.FILES.get('文件').name = 文件名称

我带微秒的原因是,如果用户快速上传多个文件,文件命名也不会重复,如果发生文件命名重复,django会随机加一串后缀比较难看。