django 文件上传存储后重名怎么解决

需求

现在面临的问题就是上传重名文件,将他们写入后变成了一个文件,现在需要的方案是上传的时候可以重名,但是存储在物理路径后不能重名,下载后文件名字为上传的文件名

我想偷懒,django admin自带上传有重名解决方案,然后下载也是上传的名字,但是自己写就不行了,想找找有没有类似django admin上传解决重名的方案

django创建了一个model 代码如下

class oderexcel(models.Model):
    file = models.FileField(upload_to='oderexcel')
    name = models.CharField(max_length=128)

    class Meta:
        db_table = 'oderexcel'
        verbose_name = '材料报表'
        verbose_name_plural = verbose_name
    def __str__(self):

存储文件是接受到用户上传的文件后写入的,写入方式如下
filename:用户上传的文件名

#数据库存入名
filenamepath = r"/oderexcel/" + filename
#将文件存储路径存数据库
oderexcel.objects.create(file=filenamepath,name=filename)
#存文件物理路径
filename = r'static/media/oderexcel/' + filename
#存储文件
workbook.save(filename)

img

img

着网站运作,难免有些时候需要上传文件。上传文件自然是上传到网站所在的服务器,日积月累,慢慢地网站存储空间越来越少。而且网站迁移和备份都不方便,使用这些资源时也占用大量服务器流量。

较好的解决方案是使用第三方存储服务器,例如七牛、阿里云OSS、亚马逊S3等。将文件都放到这些存储服务器,可以减少服务器负担。服务器只剩下必要的静态文件和代码。

我理解你说的这个文件重名可以这样解决,用户登录网站后,上传文件a.file,你直接按照时间戳进行命名后存储到服务器上,然后把上传的文件名和服务器存储的文件存入一张表;当进行下载时,先将文件复制到临时目录temp1下面,重命名为上传的名字a.file,然后再执行下载即可。将原来的上传/下载模块增加几个函数,重新包装一下就好了。