django上传文件夹获取路径名

不可能,它是InMemoryUploadedFile文件,就是个存内存的假文件。所以要从前端的js的formdata里添加一句相对路径参数:

fd.append("paths", files[i]['webkitRelativePath'])

后端获取:

request.POST.getlist('paths')

然后根据相对路径创文件夹,上传文件就好了

大致代码:
前端

<input type='file' webkitdirectory >  <button >点击测试</button>
<script>
    var files = [];
    $(document).ready(function(){
        $("input").change(function(){
            files = this.files;
        });
        $("button").click(function(){
            var fd = new FormData();
            for (var i = 0; i < files.length; i++) {

               fd.append("files", files[i]);
               fd.append("paths", files[i]['webkitRelativePath']);

            }
               console.log(files[2]['webkitRelativePath']);
            $.ajax({
                url: "api/project/upload",
                method: "POST",
                data: fd,
                contentType: false,
                processData: false,
                cache: false,
                success: function(data){
                    console.log(data);
                }
            });
        });
</script>

后端view.py

@csrf_exempt
def project_upload(request):

    if request.method == 'POST':

        dir=request.FILES
        dirlist=dir.getlist('files')
        pathlist=request.POST.getlist('paths')
        print(dir)
        if not dirlist:
            return HttpResponse( 'files not found')
        else:

            for file in dirlist:
                position = os.path.join(os.path.abspath(os.path.join(os.getcwd(),'projects')),'/'.join(pathlist[dirlist.index(file)].split('/')[:-1]))
                if not os.path.exists(position):
                    os.makedirs(position )
                storage = open(position+'/'+file.name, 'wb+')    
                for chunk in file.chunks():          
                    storage.write(chunk)
                storage.close()                 
            return HttpResponse( '1') 

另,上传文件夹不用form的enctype="multipart/form-data">也行

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前端相关 展示内容:浏览器接收后端返回的html文本(经过模板渲染)内容并在页面展示.与用户交互信息:js将用户产...
    Knight方阅读 7,819评论 0 1
  • 目录 urls.py加入url(r'^fileput/', views.fileput), 1. 利用form表单...
    CaiGuangyin阅读 2,823评论 0 1
  • 前端无法像原生APP一样直接操作本地文件,否则的话打开个网页就能把用户电脑上的文件偷光了,所以需要通过用户触发,用...
    雷波_viho阅读 4,233评论 0 1
  • 【碱个男宝】 [飞吻]恭喜孕妈妈终于怀上心心念念的小王子 前几个月一直在咨询益生碱,她抱着试试看的态度决定调理一下...
    博帕不怕阅读 1,170评论 0 0
  • 钢铁丛林中 遮住了 星星的目光 月亮得凝望 太阳得脸庞 杀死了 野草的芬芳 水流的欢畅 大地的安详 随风飘荡 何处...
    南有乔木丶不可休思阅读 1,878评论 0 1