美文网首页
upload组件上传及后台接收

upload组件上传及后台接收

作者: de650ed0ad7e | 来源:发表于2019-06-24 15:36 被阅读0次

    前端

    <el-upload
      class="upload-demo"
      :action="path"
      :on-success="getDeviceInfoData"   //文件上传成功之后调用,刷新数据
      :headers="headers"
      >
      <el-button class="el_but" size="small" type="primary">上传录入的数据</el-button>
    </el-upload>
    

    data中定义变量

            path:this.$path + 'resources/deviceInfo/',
            headers:{"Authorization":"JWT " + localStorage.getItem("token")},  // upload组件的请求头携带token 
    

    后台:

    class DeviceInfoViewSet(ModelViewSet):
        """"设备信息增删改查"""
        serializer_class = DeviceInfoSerializer
        queryset = DeviceInfo.objects.filter(Is_delete=1).order_by("id")  # 查询使用了多线程,此排序就没用了
    
        isExists = os.path.exists(os.path.dirname(os.path.realpath(__file__)) + "/excel")
        if not isExists:
            # 如果不存在则创建目录
            os.makedirs(os.path.dirname(os.path.realpath(__file__)) + "/excel/")
    
        def create(self, request, *args, **kwargs):
            # excel上传设备信息解析录入
            # serializer = self.get_serializer(data=request.data)
            # serializer.is_valid(raise_exception=True)
            # self.perform_create(serializer)
            # headers = self.get_success_headers(serializer.data)
            # print(2)
            # logger_resource.info(request.data)
            # print(3)
            # return Response(serializer.data, headers=headers)
            try:
                data = request.data.get("file")
                print("hello")
                # 1,写入上传的excel文件至指定的服务器路径
                with open(os.path.dirname(os.path.realpath(__file__)) + "/excel/" + data.name, 'wb') as f:
                    for chunk in data.chunks():
                        f.write(chunk)
                # 2,解析上传的excel文件数据,存入数据库
                # 打开已有xlsx文件
                wb = load_workbook(os.path.dirname(os.path.realpath(__file__)) + "/excel/" + data.name)
                # 获得所有sheet的名称
                sheet_names = wb.get_sheet_names()
                # 根据sheet名字获得sheet
                sheet = wb.get_sheet_by_name(sheet_names[0])
                # 获取最大行,for循环取值进行存储
                max_row = sheet.max_row
                # TODO
                list_obj = []
                for i in range(2, (max_row + 1)):
                    Di_name = sheet["A%d" % i].value  # 设备名称
                    Di_type = sheet["B%d" % i].value  # 设备类型
                    Di_version = sheet["C%d" % i].value  # 设备规格
                    Di_firm = sheet["D%d" % i].value  # 设备厂商
                    Di_address = sheet["E%d" % i].value  # 使用地点
                    Di_range = sheet["F%d" % i].value  # 设备量程
                    Di_num = sheet["G%d" % i].value  # 设备编号
                    Di_SN = sheet["H%d" % i].value  # 设备出厂编号
                    Check_number = sheet["I%d" % i].value  # 仪校编号
                    Di_assets_nature = sheet["J%d" % i].value  # 资产性质
                    Di_assets_id = sheet["K%d" % i].value  # 资产编号
                    Di_column_id = sheet["M%d" % i].value  # 列管编号
                    Di_use_id = sheet["M%d" % i].value  # 使用编号
                    Di_dep = sheet["N%d" % i].value  # 设备所属部门
                    Di_passage_num = sheet["O%d" % i].value  # 通道数量
                    Di_status = sheet["P%d" % i].value  # 设备状态
                    Di_is_accept = sheet["Q%d" % i].value  # 是否验收
                    Accept_number = sheet["R%d" % i].value  # 验收单号
                    Godown_number = sheet["S%d" % i].value  # 入库单号
                    Di_temperature_max = sheet["T%d" % i].value  # 最高温度
                    Di_temperature_min = sheet["U%d" % i].value  # 最低温度
                    Di_accept_time = sheet["V%d" % i].value  # 验收时间
                    Di_buy_time = sheet["W%d" % i].value  # 购买时间
                    Di_Asset_manager = sheet["X%d" % i].value  # 资产管理员工号
                    versions = sheet["Y%d" % i].value  # 版本
                    address = sheet["H%d" % i].value  # 通讯
                    list_obj.append(DeviceInfo(Di_name=Di_name,
                                               Di_type=Di_type,
                                                Di_version=Di_version,
                                                Di_firm=Di_firm,
                                                Di_address=Di_address,
                                                Di_range=Di_range,
                                                Di_num=Di_num,
                                                Di_SN=Di_SN,
                                                Check_number=Check_number,
                                                Di_assets_nature=Di_assets_nature,
                                                Di_assets_id=Di_assets_id,
                                                Di_column_id=Di_column_id,
                                                Di_use_id=Di_use_id,
                                                Di_dep=Di_dep,
                                                Di_passage_num=Di_passage_num,
                                                Di_status=Di_status,
                                                Di_is_accept=Di_is_accept,
                                                Accept_number=Accept_number,
                                                Godown_number=Godown_number,
                                                Di_temperature_max=Di_temperature_max,
                                                Di_temperature_min=Di_temperature_min,
                                                Di_accept_time=Di_accept_time,
                                                Di_buy_time=Di_buy_time,
                                                Di_Asset_manager=Di_Asset_manager,
                                                versions=versions,
                                                address=address
                                                ))
                DeviceInfo.objects.bulk_create(list_obj)
                # 删除上传的文件
                # os.remove(os.path.dirname(os.path.realpath(__file__)) + "/excel/" + data.name)
                return ReturnData(message="设备信息录入成功")
    

    相关文章

      网友评论

          本文标题:upload组件上传及后台接收

          本文链接:https://www.haomeiwen.com/subject/xzkoqctx.html