如何将文件上传到 Django 中的任意目录?

How to upload files onto arbitrary directories in Django?

我正在用 Django 开发一个文件管理器。我正在使用 SFTP 文件服务器和 django-storage package 来管理文件。

到目前为止,我开发了一些 Apis 供用户在他们自己的根目录(对用户来说是抽象的)下创建和修改目录。现在我想让用户能够将他们的文件上传到他们的子目录或在这些子目录之间移动文件,但我不知道如何做?!

这是我用于文件管理的模型:

def user_directory_path(instance, filename):
    return 'user_{0}/{1}'.format(format(instance.owner.id, '010d'), filename)

class UploadedFile(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=150)
    owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    file = models.FileField(upload_to=user_directory_path)

如您所见,当前文件将上传到<server-root>/user_<10digit-userid>/目录。

提前致谢。

最后我在名为 upload_to 的模型中添加了一个额外的 CharField 并在 user_directory_path 函数中使用它来指示文件的子目录。

def user_directory_path(instance, filename):
    if instance.upload_to != '' and instance.upload_to[-1] != '/':
        upload_to = instance.upload_to + '/'
    else:
        upload_to = instance.upload_to
    return 'user_{0}/{1}{2}'.format(format(instance.owner.id, '010d'), upload_to, filename)

class UploadedFile(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=150)
    owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    file = models.FileField(upload_to=user_directory_path)
    upload_to = models.CharField(max_length=255, default='')