【问题标题】:django how to upload folderdjango如何上传文件夹
【发布时间】:2014-03-08 02:35:37
【问题描述】:

我知道如何通过 django 上传多个文件,但是如果文件夹中有子文件夹,我在上传文件夹时会遇到问题。 django 无法接收子文件夹。我找到了原因,因为浏览器使用'.'表示一个文件夹,但 django 无法解析它然后停止解析。有没有优雅的方法来解决它?

python 代码:

def uploader_single(request):
    data = {}
    if request.method == 'POST':
        if True:
            for afile in request.FILES.getlist('file'):
                new_file = UploadFileSingle(file = afile)
                new_file.save()

            return HttpResponseRedirect('')
        else:
            print "form is not valid"
            return HttpResponseRedirect('')
    else:
        print 'not post'

Python 代码:

class UploadFileSingle(models.Model):
    file        = models.FileField(upload_to='files/%Y/%m/%d', models.FilePath)
    uploaded_at = models.DateTimeField(auto_now_add=True)
    models.FilePathField.recursive = True
    models.FilePathField.allow_folders = True
    updated_at  = models.DateTimeField(auto_now=True)

    def some_folder = FilePathField(path='some_path', recursive=True, allow_files=True, allow_folders=True,)'

HTML 代码:

<input type="file" name="file" multiple = "true" webkitdirectory="true" directory = "true"/>

【问题讨论】:

    标签: python django file-upload upload uploading


    【解决方案1】:

    你可以使用 django 文件管理器

    rerfer:https://github.com/stefanfoulis/django-filer

    【讨论】:

    • 非常感谢。但是您能否解释一下我如何才能在我的情况下准确地应用过滤器?谢谢。
    • django 过滤器不能做到这一点。我的结论是 django 还做不到。
    • 与问题无关
    【解决方案2】:

    有更新的话题提出了同样的问题,我试图回答:

    Django directory upload get sub-directory names

    如果你想拥有不同的行为,你需要编写自己的上传处理程序,基本上这是 Django 的默认行为

    【讨论】:

      【解决方案3】:

      我想出了解决这个问题的简单方法。

      • 您可以在前端通过 html 和 javascript 获取文件夹名称
      • 将其作为值传递给隐藏的表单字段
      • 您可以在后端创建一个具有该名称的目录
      • 并在此目录中上传文件。

      HTML

      <input type="hidden" name="dir_name" id="id_dir_name">
      <input type="file" name="file" onchange="selectFolder(event)" webkitdirectory="" multiple="" required="" directory="" id="id_file">
      

      JS

      function selectFolder(e) {
          var theFiles = e.target.files;
          var relativePath = theFiles[0].webkitRelativePath;
          var folder = relativePath.split("/");
          $("#" + id).val(folder[0]);
      }
      

      浏览量

      directory_name = form.cleaned_data['dir_name']
      os.mkdir(os.path.join(settings.MEDIA_ROOT, directory_name))
      handle_uploaded_file(request.FILES['file'], directory_name)
      

      【讨论】:

      • 更推荐编写自己的上传处理程序
      猜你喜欢
      • 1970-01-01
      • 2022-12-07
      • 2021-09-12
      • 1970-01-01
      • 2020-02-05
      • 2016-07-11
      • 1970-01-01
      • 2015-08-06
      • 1970-01-01
      相关资源
      最近更新 更多