关于django 上传文件的问题

最近做项目的时候,要用到文件上传,起初 使用 js uploadify插件+django上传,并存入数据库中。碰到一些问题:

  直接 贴上 代码了:

            

def upload_download_files(request):
    if request.method == "POST":
        #form = uploadForm(request.POST,request.FILES)
        #if form.is_valid():
        fileObj = request.FILES.get('Filedata',None) 
        download_type = request.POST.get('type','') 
        original_name = fileObj.name.encode('utf-8','ignore') # 文件原名称
        file_ext = original_name.split('.')[-1]
        file_name =  str(time.time())#str(uuid.uuid4())
        upload_to="download"     #上传 路径 models下配置的
        subfolder = upload_to + '/' + time.strftime("%Y%m")
        if not os.path.exists(settings.MEDIA_ROOT[0] + subfolder):
            os.makedirs(settings.MEDIA_ROOT[0] + subfolder)

        path = str(subfolder + '/' + file_name + '.' + file_ext)
        
        if file_ext.lower() in ('jpg','jpeg','png','doc','docx','zip','pdf','txt','ppt','xls'):
            phisypath = settings.MEDIA_ROOT[0] + path
            
           
            destination = open(phisypath, 'wb+')
            for chunk in fileObj.chunks():
                destination.write(chunk)            
                destination.close()

        #myresponse ="{'original_name':'%s','new_name':'%s','file_path':'%s'}" % (original_name, file_name, phisypath)
        pattern = re.compile(r'/media[\s,\S]+') #匹配 media 路径
        match = pattern.findall(phisypath)[0]
        downloadType = create_download_type.objects.get(new_type=download_type)
        p = files_download(
            download_type = downloadType,
            original_name = original_name,
            new_name = file_name+"."+file_ext,
            path = match
        )
        p.save()
        return HttpResponse(json.dumps(match),content_type='application/json')
    else:
        return HttpResponse('发送请求方法不对-_-||')

 其实 这样做的话,是没有问题的,但是当你要上传一些大文件的时候,就上传不了,会报 500错误!

问题主要出在这里:

            destination = open(phisypath, 'wb+')
            for chunk in fileObj.chunks():
                destination.write(chunk)            
                destination.close()

参考文章:Django文件上传机制详解 

django  文件上传 文档

chunk()默认只有 2.5M

解决方法:

            f = open(phisypath, 'wb+')
            req = fileObj.read()
            f.write(req)
            f.close()

用 read()方法解决!

你可能感兴趣的:(关于django 上传文件的问题)