如何使用Django将文件从不同的子文件夹上载到不同的子文件夹

如何使用Django将文件从不同的子文件夹上载到不同的子文件夹,django,file-upload,django-models,Django,File Upload,Django Models,我在一个文件夹下有许多文件(例如,“数据集”),这些文件在许多不同的子字典中分开 我想让用户在表单中指定文件夹“dataset”,并在Django中上载所有文件。上传后,Django view函数将从每个文件中提取一些信息并保存到数据库中。我怎样才能做到这一点 以下是我要上传的文件的结构: datasets - subfolder 1 - file1 - file2 - subfolder 1a - file3 - subfolder 2 - fil

我在一个文件夹下有许多文件(例如,“数据集”),这些文件在许多不同的子字典中分开

我想让用户在表单中指定文件夹“dataset”,并在Django中上载所有文件。上传后,Django view函数将从每个文件中提取一些信息并保存到数据库中。我怎样才能做到这一点

以下是我要上传的文件的结构:

datasets
- subfolder 1
   -  file1
   -  file2
   -  subfolder 1a
       - file3
- subfolder 2
   -  file4
- file5
定义如下:

此属性提供了一种设置上载目录和文件的方法 名称,并可通过两种方式设置。在这两种情况下,都会传递值 到Storage.save()方法。。。上传到也可能是可调用的, 比如一个函数。这将被调用以获取上载路径, 包括文件名。此可调用项必须接受两个参数和 返回要传递给的Unix样式路径(带正斜杠) 存储系统。这两个论点是:

因此,您需要做的是创建一个函数,该函数将检查文件名或其内容,并决定文件应保存在何处

def get_upload_path(instance, filename):
    if filename .... :
        return 'path1'
    else :
        return 'path2'
您的型号将更改为

image = models.FileField(upload_to=get_upload_path)
定义如下:

此属性提供了一种设置上载目录和文件的方法 名称,并可通过两种方式设置。在这两种情况下,都会传递值 到Storage.save()方法。。。上传到也可能是可调用的, 比如一个函数。这将被调用以获取上载路径, 包括文件名。此可调用项必须接受两个参数和 返回要传递给的Unix样式路径(带正斜杠) 存储系统。这两个论点是:

因此,您需要做的是创建一个函数,该函数将检查文件名或其内容,并决定文件应保存在何处

def get_upload_path(instance, filename):
    if filename .... :
        return 'path1'
    else :
        return 'path2'
您的型号将更改为

image = models.FileField(upload_to=get_upload_path)

编辑得不错。您可以解决我将文件保存到不同子文件夹的问题。但是如果我想从不同的子文件夹上传文件呢。我阅读文档。默认上载仅允许您从一个文件夹上载多个文件。如果该文件夹下的子文件夹中有文件,则子文件夹中的文件将被忽略。我编辑了我的问题标题来澄清我的问题。这不是django的问题。这就是浏览器行为。您必须在客户端使用递归文件上传程序。我不确定目前是否有。大多数现有的都是用java制作的。这是怎么回事?我已经找到了一个棘手的解决方案,压缩了所有的子字典和文件。然后使用zipfile模块和您的代码来处理其余部分是的,现在这似乎是唯一的选择。我以前也有一个递归文件上传程序小程序,但它不再工作了,因为浏览器正在停止支持.nice编辑。您可以解决我将文件保存到不同子文件夹的问题。但是如果我想从不同的子文件夹上传文件呢。我阅读文档。默认上载仅允许您从一个文件夹上载多个文件。如果该文件夹下的子文件夹中有文件,则子文件夹中的文件将被忽略。我编辑了我的问题标题来澄清我的问题。这不是django的问题。这就是浏览器行为。您必须在客户端使用递归文件上传程序。我不确定目前是否有。大多数现有的都是用java制作的。这是怎么回事?我已经找到了一个棘手的解决方案,压缩了所有的子字典和文件。然后使用zipfile模块和您的代码来处理其余部分是的,现在这似乎是唯一的选择。我以前也有一个递归文件上传程序小程序,但它不再工作了,因为浏览器支持chrome。