Exemple #1
0
def file_post(request, project_id):
    """
    已上传成功的文件写入到数据库
    前端传来的值:
        name:fileName,
        key:key,
        file_size:fileSize,
        parent:CURRENT_FOLDER_ID,// 当前访问的目录id
        etag:data.ETag, // 腾讯对象返回的id
        file_path:data.Location
    :param request:
    :param project_id:
    :return:
    """
    # 根据key再去cos获取文件Etag和
    # 把获取到的数据写入到数据库
    form = FileModelForm(request, data=request.POST)
    if form.is_valid():
        # 校验通过:数据写入到数据库
        # 通过ModelForm.save存储到数据库中的数据返回的instance对象,无法通过get_xx_display获取choice的中文
        # form.instance.file_type = 1
        # form.update_user = request.tracer.user
        # instance = form.save()
        # 使用第二种方法,能通过get_xx_display获取choice的中文
        data_dict = form.cleaned_data  # 验证成功后的字段
        data_dict.pop("etag")  # models模型中没有etag字段,所以去除
        data_dict.update({
            "project": request.tracer.project,
            "file_type": 1,
            "update_user": request.tracer.user
        })
        instance = models.FileRepository.objects.create(**data_dict)

        # 项目已使用空间:更新data_dict.get("file_size")单位是字节
        request.tracer.project.user_space += data_dict.get("file_size")
        request.tracer.project.save()

        result = {
            "id":
            instance.id,
            "name":
            instance.name,
            "file_size":
            instance.file_size,
            "username":
            instance.update_user.username,
            'datetime':
            instance.update_datetime.strftime("%Y{0}%m{1}%d{2} %H:%M").format(
                "年", "月", "日"),
            "download_url":
            reverse("file_download",
                    kwargs={
                        "project_id": project_id,
                        "file_id": instance.id
                    })
            # "file_type": instance.get_file_type_display(),
        }
        return JsonResponse({"status": True, "data": result})
    return JsonResponse({"status": False, "data": "文件错误"})
Exemple #2
0
def file_post(request, project_id):
    """ 已上传成功的文件写入到数据 """
    """
    name: fileName,
    key: key,
    file_size: fileSize,
    parent: CURRENT_FOLDER_ID,
    # etag: data.ETag,
    file_path: data.Location
    """
    # 根据key再去cos获取文件Etag和"db7c0d83e50474f934fd4ddf059406e5"

    print(request.POST)
    # 把获取到的数据写入数据库即可
    form = FileModelForm(request, data=request.POST)
    if form.is_valid():
        # 通过ModelForm.save存储到数据库中的数据返回的isntance对象,无法通过get_xx_display获取choice的中文
        # form.instance.file_type = 1
        # form.update_user = request.tracer.user
        # instance = form.save() # 添加成功之后,获取到新添加的那个对象(instance.id,instance.name,instance.file_type,instace.get_file_type_display()

        # 校验通过:数据写入到数据库
        data_dict = form.cleaned_data
        data_dict.pop('etag')
        data_dict.update({
            'project': request.blog.project,
            'file_type': 1,
            'update_user': request.blog.user
        })
        instance = models.FileRepository.objects.create(**data_dict)

        # 项目的已使用空间:更新 (data_dict['file_size'])
        request.blog.project.user_space += data_dict['file_size']
        request.blog.project.save()

        result = {
            'id':
            instance.id,
            'name':
            instance.name,
            'file_size':
            instance.file_size,
            'username':
            instance.update_user.username,
            'datetime':
            instance.update_datetime.strftime("%Y{y}%m{m}%d{d} %H:%M").format(
                y="年", m="月", d="日"),
            'download_url':
            reverse('file_download',
                    kwargs={
                        "project_id": project_id,
                        'file_id': instance.id
                    })
            # 'file_type': instance.get_file_type_display()
        }
        return JsonResponse({'status': True, 'data': result})

    return JsonResponse({'status': False, 'data': "文件错误"})
Exemple #3
0
def file_post(request, project_id):
    """
    已上传成功的文件写入数据库
    传入的数据参数:
    name: fileName,
    key: key,
    file_size: fileSize,
    parent: CURRENT_FOLDER_ID,
    file_path: data.Location
    """
    print(request.POST)
    form = FileModelForm(request, data=request.POST)
    print(form)
    if form.is_valid():
        # 校验通过,数据写入到数据库
        # 通过 ModelForm.save存储到数据库中的数据返回的instance对象,无法通过get_xxx_display获取到choice中文
        # form.instance.file_type = 1
        # form.update_user = request.bug_mgt.user
        # instance = form.save()  # 添加成功后,可以获取instance.id, instance.name等,但是无法获取instance.file_type的中文

        data_dict = form.cleaned_data
        print(data_dict)
        data_dict.pop('etag')
        data_dict.update({
            'project': request.bug_mgt.project,
            'file_type': 1,
            'update_user': request.bug_mgt.user
        })
        instance = models.FileRepository.objects.create(**data_dict)
        # 项目已使用空间
        request.bug_mgt.project.used_space += data_dict['size']
        request.bug_mgt.project.save()
        print(request.bug_mgt.project.used_space)
        result = {
            'id':
            instance.id,
            'name':
            instance.file_name,
            'file_size':
            instance.size,
            'update_user':
            instance.update_user.username,
            'datetime':
            instance.update_time.strftime("%Y{}%m{}%d{} %H:%M").format(
                '年', '月', '日'),
            'download_url':
            reverse('file_download',
                    kwargs={
                        'project_id': project_id,
                        'file_id': instance.id
                    }),
            'file_type':
            instance.get_file_type_display()
        }
        return JsonResponse({'status': True, 'data': result})

    return JsonResponse({'status': False, 'data': '文件错误'})
Exemple #4
0
def file_post(request, project_id):
    """
    已上传成功的文件写入到数据
    :param request:
    :param project_id:
    :return:
    """
    # 根据key再去cos获取文件Etag和"654bde1e7bd87e61e72c079da6096f9d"
    print(request.POST)
    # 把获取到的数据写入数据库即可
    form = FileModelForm(request, data=request.POST)
    if form.is_valid():
        # 通过ModelForm.save存储到数据库中的数据返回的isntance对象,无法通过get_xx_display获取choice的中文
        # form.instance.file_type = 1
        # form.update_user = request.tracer.user
        # instance = form.save() # 添加成功之后,获取到新添加的那个对象(instance.id,instance.name,instance.file_type,instace.get_file_type_display()

        # 校验通过:数据写入到数据库
        data_dict = form.cleaned_data
        data_dict.pop('etag')
        data_dict.update({
            'project': request.tracer.project,
            'file_type': 1,
            'update_user': request.tracer.user
        })
        instance = models.FileRepository.objects.create(**data_dict)

        # 项目的已使用空间:更新 (data_dict['file_size'])
        request.tracer.project.use_space += data_dict['file_size']
        request.tracer.project.save()

        result = {
            'id':
            instance.id,
            'name':
            instance.name,
            'file_size':
            instance.file_size,
            'username':
            instance.update_user.username,
            'datetime':
            instance.update_datetime.strftime('%Y{y}%m{m}%d{d} %H:%M').format(
                y='年', m='月', d='日'),
            'download_url':
            reverse('file_download',
                    kwargs={
                        "project_id": project_id,
                        'file_id': instance.id
                    })
            # 'file_type': instance.get_file_type_display()
        }
        return JsonResponse({'status': True, 'data': result})

    return JsonResponse({'status': False, 'data': "文件错误"})
Exemple #5
0
def file_post(request, project_id):
    """ 已上传成功的文件写入到数据 """
    """
    name: fileName,
    key: key,
    file_size: fileSize,
    parent: CURRENT_FOLDER_ID,
    # etag: data.ETag,
    file_path: data.Location
    """

    # 根据key再去cos获取文件Etag和"db7c0d83e50474f934fd4ddf059406e5"

    print(request.POST)
    # 把获取到的数据写入数据库即可
    form = FileModelForm(request, data=request.POST)
    if form.is_valid():
        # 校验通过,写入数据库
        # form.instance.file_type = 1
        # form._update_user = request.saas.user
        data_dict = form.cleaned_data
        data_dict.pop('etag')
        data_dict.update({
            'project': request.saas.project,
            'file_type': 1,
            'update_user': request.saas.user
        })
        instance = FileRepository.objects.create(**data_dict)
        #项目的已使用空间
        request.saas.project.use_space += data_dict['file_size']
        request.saas.project.save()

        result = {
            'id':
            instance.id,
            'name':
            instance.name,
            'file_size':
            instance.file_size,
            'username':
            instance.update_user.name,
            'datetime':
            instance.update_datetime.strftime('%Y年-%m月-%d日 %H:%M'),
            # 'file_type':instance.get_file_type_display()
            'download_url':
            reverse('file_download',
                    kwargs={
                        'project_id': project_id,
                        'file_id': instance.id
                    })
        }
        return JsonResponse({'status': True, 'data': result})
    return JsonResponse({'status': False, 'data': '文件错误'})
Exemple #6
0
def file_post(request, project_id):
    """
    已成功上传的文件写入到数据库
    name:fileName,
    key:key,
    file_size:fileSize,
    parent:CURRENT_FOLDER_ID,
    etag:data.ETag,
    file_path:data.Location
    :param request:
    :param project_id:
    :return:
    """
    form = FileModelForm(request, data=request.POST)
    if form.is_valid():
        # 校验通过,写入数据库
        data_dict = form.cleaned_data
        data_dict.pop('etag')
        data_dict.update({
            'project': request.tracer.project,
            'file_type': 1,
            'update_user': request.tracer.user
        })
        instance = models.File.objects.create(**data_dict)

        # 项目已使用空间进行更新
        request.tracer.project.user_space += data_dict['file_size']
        request.tracer.project.save()

        result = {
            'id':
            instance.id,
            'name':
            instance.name,
            'file_size':
            instance.file_size,
            'username':
            instance.update_user.username,
            'datetime':
            instance.update_datetime.strftime(
                '%Y{Y}-%m{m}-%d{d} %H:%M').format(Y='年', m='月', d='日'),
            'file_type':
            instance.get_file_type_display(),
            'download_url':
            reverse('file_download',
                    kwargs={
                        'project_id': project_id,
                        'file_id': instance.id
                    })
        }
        return JsonResponse({'status': True, 'data': result})
    return JsonResponse({'status': False, 'data': '文件错误'})
Exemple #7
0
def file_post(request, project_id):
    """将已经长传成功的文件写入到数据库"""
    # request.POST.get('name')
    # request.POST.get('size')
    # 前端传递过来的值:
    # name: fileName,
    # file_size: fileSize,
    # key: key,
    # parent: CURRENT_FOLDER_ID,
    # etag: data.ETag,
    # file_path: data.Location

    form = FileModelForm(request, data=request.POST)
    if form.is_valid():
        # form.instance.file_type = 1
        # form.update_user = request.lxyker.user
        # 这种写法,没有办法使用instance.get_file_type_display()获取类型的中文
        # instance = form.save()  # 添加成功后,这个instance就是这个新添加的对象

        # 所以,可用用下面这种自己构造字典的方法,将数据写入数据库,并且将其传递到前端
        # 校验通过,将数据写入到数据库
        data_dict = form.cleaned_data
        data_dict.pop('etag')
        data_dict.update({
            'project': request.lxyker.project,
            'file_type': 1,
            'update_user': request.lxyker.user,
        })
        instance = models.FileRepository.objects.create(**data_dict)

        # 更新项目的已使用空间
        request.lxyker.project.use_space += data_dict['file_size']
        request.lxyker.project.save()

        result = {
            'id': instance.id,
            'name': instance.name,
            'file_size': instance.file_size,
            'username': instance.update_user.username,
            'datetime': instance.update_datetime.strftime('%Y{y}%m{m}%d{d} %H:%m').format(y='年', m='月', d='日'),
            'file_type': instance.get_file_type_display(),
            'download_url': reverse('file_download', kwargs={'project_id': project_id, 'file_id': instance.id})
        }
        return JsonResponse({'status': True, 'data': result})

    return JsonResponse({'status': True, 'data': '文件错误'})
Exemple #8
0
def file_post(request, project_id):
    # 将上传成功的文件写入到数据库
    # 把获取到的数据写入到数据库
    form = FileModelForm(request, data=request.POST)
    if form.is_valid():
        data_dict = form.cleaned_data
        data_dict.pop('etag')
        data_dict.update({
            'project': request.tracer.project,
            'file_type': 1,
            'update_user': request.tracer.user
        })
        instance = models.FileRepository.objects.create(**data_dict)

        # 项目的一使用空间:更新

        request.tracer.project.use_space += data_dict['file_size']
        request.tracer.project.save()
        result = {
            'id':
            instance.id,
            'name':
            instance.name,
            'file_size':
            instance.file_size,
            'username':
            instance.update_user.username,
            'datetime':
            instance.update_time.strftime("%Y-%m-%d %H:%M"),
            'download_url':
            reverse('web:manage:file_download',
                    kwargs={
                        "project_id": project_id,
                        'file_id': instance.id
                    })
        }
        return JsonResponse({'status': True, 'data': result})

    return JsonResponse({'status': False, 'data': '文件错误'})
Exemple #9
0
def file(request, project_id):
    folder_id = request.GET.get('folder_id', '')
    if request.method == 'GET':

        menu_list = []
        if folder_id:
            folder_id = int(folder_id)
            ret_obj = PorjectFile.objects.filter(id=folder_id,
                                                 file_type=1).first()
            form = FileModelForm(instance=ret_obj)
            while ret_obj:
                menu_list.insert(0, {'id': ret_obj.id, 'title': ret_obj.title})
                ret_obj = ret_obj.parent
            file_query_set = PorjectFile.objects.filter(project=project_id,
                                                        parent=folder_id)
        else:
            form = FileModelForm()
            file_query_set = PorjectFile.objects.filter(project=project_id,
                                                        parent=None)

        return render(
            request, 'file.html', {
                'file_query_set': file_query_set,
                'menu_list': menu_list,
                'forms': form,
                'folder_id': folder_id
            })

    form = FileModelForm(data=request.POST)

    if form.is_valid():
        parent_id = request.POST.get('parent')
        form.instance.project = request.tracer.project
        form.instance.parent_id = parent_id
        form.instance.update_user = request.tracer.user
        form.save()
        print('完成创建')
        return JsonResponse({'status': True})
    print(form.errors)
    return JsonResponse({'status': False, 'errors': form.errors})
Exemple #10
0
def file_edit(request, project_id):
    """编辑文件夹"""
    folder_id = request.GET.get('folder_id', '')
    file_obj = PorjectFile.objects.filter(project=project_id,
                                          id=folder_id).first()
    form = FileModelForm(instance=file_obj)
Exemple #11
0
def file_post(request, project_id):

    # print(request.POST)
    # 'name': fileName,
    # 'key': key,
    # 'file_size': fileSize,
    # 'parent': CURRENT_FOLDER_ID,
    # 'etag': data.ETag,
    # 'file_path': data.Location,

    form = FileModelForm(request, data=request.POST)
    if form.is_valid():
        # 通过ModelForm.save存储到数据库中的数据返回的isntance对象,无法通过get_xx_display获取choice的中文
        # form.instance.file_type = 1
        # form.update_user = request.tracer.user
        # instance = form.save() # 添加成功之后,获取到新添加的那个对象(instance.id,instance.name,instance.file_type,instace.get_file_type_display()

        data_dict = form.cleaned_data
        data_dict.pop('etag')  # 把etag这个字段去掉,因为数据库的表中没有这个字段
        # 写入数据库
        data_dict.update({
            'project': request.tracer.project,
            'file_type': 1,
            'update_user': request.tracer.user,
        })

        # todo 设置事务
        try:
            with transaction.atomic():
                instance = FileRepository.objects.select_for_update().create(**data_dict)
                # 更新这个项目的已经使用空间
                #
                # 这样写不行, 有并发问题,因为前端多个ajax发送过来的request.tracer.project不是更新之后的project对象
                # request.tracer.project.use_space += instance.file_size
                # request.tracer.project.save()
                #
                project_object = Project.objects.select_for_update().get(id=project_id)
                # print('-'*66)
                # print('原来空间:', project_object.use_space)
                project_object.use_space += data_dict['file_size']
                project_object.save()
                # print('之后空间:', project_object.use_space)
                # print('-'*66)

        except Exception as e:
            # todo 如果保存失败,应该把这个文件从cos中删除

            return JsonResponse({'status': False})

        # 日期格式化
        file_time = instance.update_datetime.timetuple()
        file_time = str(file_time.tm_year)+'年'+str(file_time.tm_mon)+'月'+str(file_time.tm_mday)+"日 "+\
                    str(file_time.tm_hour+8)+':'+str(file_time.tm_min)
        data = {
            'id': instance.id,
            'name': instance.name,
            # 'file_type': instance.file_type,
            'file_size': instance.file_size,
            'update_user': instance.update_user.username,
            'update_datetime': file_time,
            # strftime("%Y{}%m{}%d{} %H:%M").format('年', '月', '日'),
            'download_url': reverse('web:file_download', kwargs={'project_id': project_id, 'file_id': instance.id})

        }
        return JsonResponse({'status': True, 'data': data})

    return JsonResponse({'status': False, 'error': form.errors})