我陷入了这一步:
我有一个上传功能,可以将文件保存在upload
文件夹下的media
文件夹下。这些文件将保存在文件夹中,这些文件夹同时也是由上传文件的用户名创建的。这些带文件的文件夹将在upload
文件夹
media
文件夹下创建
def custom_path(instance, filename):
return '/'.join(['upload',instance.student.user.username,filename])
class Doc(models.Model):
uploadtime = models.DateTimeField(auto_now_add=True, blank=True)
datei = models.FileField(upload_to=custom_path,default='')
现在我想做的是:
1)搜索特定的文件夹名称 2)如果找到,请查看 - 如果没有找到,请创建一个。
如何获取给定文件夹下的所有文件夹名称?或者我如何循环文件夹并获取他们的名字?
如果我这样做:os.path.abspath(os.path.join(os.path.dirname( __file__ ), os.pardir, 'media/upload'))
我正在获取upload
文件夹的路径。我有点困惑,不知道如何在此路径下搜索文件夹名称
任何声明都将不胜感激
答案 0 :(得分:2)
def custom_path(instance, filename):
path = os.path.join('upload', 'media', slugify(instance.student.user.username))
try:
os.path.mkdir(path)
except OSError:
# path already exists
pass
如果用户名包含一些不允许作为文件名的特殊字符,请使用slugify
。
os.path.mkdir
将引发OSError
。
最后,os.path.join
正确创建路径,而您不需要文件名组件,因为您要返回目录路径。
答案 1 :(得分:1)
您可能需要记住的一件事是,在 media / upload 下拥有大量子目录最终会非常非常慢地访问该目录。根据我的经验,访问时间开始恶化,目录下有大约1000个目录/文件。
如果您预计会出现这种情况,您可能需要修改您的设计,以便将用户的文件存储在数据库中。