我有一个带有 ImageField 的模型。我已经设置了upload_to并创建了自己的FileSystemStorage类来处理使用唯一名称保存文件......但是......
此设置允许我为每个文件上传并保存一个具有唯一名称的文件(这很好),但我还需要它来删除以前存在的文件,例如
我上传 file1.png 并将其保存为 file1_xkdeujg.png (这只是一个随机字符串)
然后我进入 django admin(使用 django 管理界面,因此需要通过模型进行)并将该字段的图像更改为 fileNEW.png
现在需要做的是:
1)它将新文件保存为fileNEW_fjewiejk.png(每次保存图像时唯一的随机字符串) -完成
2)它将新文件保存到数据库中 -完成
3) 它从文件系统中删除旧文件 - file1_xkdeuig.png -未完成
问:有人可以帮我解决第 3 点吗?
一些代码:
class Page(models.Model):
image = models.ImageField(upload_to='pages/', storage=MyFileSystemStorage())
并且(从其他地方借用了大部分代码......):
class MyFileSystemStorage(FileSystemStorage):
def get_valid_name(self, name):
file_root, file_ext = os.path.splitext(name)
return "%s_%s%s" % (file_root, rand_key(8), file_ext)
def get_available_name(self, name):
dir_name, file_name = os.path.split(name)
file_root, file_ext = os.path.splitext(file_name)
count = itertools.count(1)
while self.exists(name):
name = os.path.join(dir_name, "%s_%s%s" % (rand_key(32), count.next(), file_ext))
return name