压缩文件读取

    public ErrorCode uploadCompressedFile(MultipartFile file, String groupId, UserDetailDTO userInfo)
            throws IOException {
        String path = mocWidgetsGroupMapper.selectGroupPath(groupId);
        if (StringUtils.isBlank(path)) {
            return ErrorCode.visionGroupNameNotExit;
        }
//        List<String> existWidgetlist = new ArrayList<String>();
        Map<String, MocWidgetsVO> widgetMap = new HashMap<String, MocWidgetsVO>();
        List<MocWidgetsVO> widgetList = new ArrayList<MocWidgetsVO>();
        // 获取ZIP输入流(一定要指定字符集Charset.forName("GBK")否则会报java.lang.IllegalArgumentException:
        // MALFORMED)
        ZipInputStream zipInputStream = new ZipInputStream(file.getInputStream(), Charset.forName("GBK"));
        // 定义ZipEntry置为null,避免由于重复调用zipInputStream.getNextEntry造成的不必要的问题
        BufferedReader br = null;
        ZipEntry zipEntry = null;
        // 循环遍历
        while ((zipEntry = zipInputStream.getNextEntry()) != null) {
            if (!zipEntry.isDirectory()) {
                String fullName = zipEntry.getName();// asset/test/test.json asset/test/test.png asset/test
                String[] tempMenu = fullName.split("/");
                String fileName = tempMenu[tempMenu.length - 1];// test.json test.png
                String realName = fileName.split("\\.")[0];// test

                if (!widgetMap.containsKey(realName)) {
                    MocWidgetsVO mocWidgetsVO = new MocWidgetsVO();
                    mocWidgetsVO.setWidgetName(realName);
                    mocWidgetsVO.setWidgetGroupId(groupId);
                    mocWidgetsVO.setCreateDate(new Date());
                    mocWidgetsVO.setCreateUserId(userInfo.getUserId());
                    mocWidgetsVO.setCreateUserName(userInfo.getName());
                    mocWidgetsVO.setModifyDate(new Date());
                    mocWidgetsVO.setModifyUserId(userInfo.getUserId());
                    mocWidgetsVO.setModifyUserName(userInfo.getName());
                    widgetMap.put(realName, mocWidgetsVO);
                }
                MocWidgetsVO mocWidgetsVO = widgetMap.get(realName);
                if (CommUtil.isImage(fullName)) {
                    ByteArrayOutputStream out = new ByteArrayOutputStream();
                    while (zipInputStream.available() != 0) {
                        out.write(zipInputStream.read());
                    }
                    InputStream inputStream = new ByteArrayInputStream(out.toByteArray());
                    String storageId = storageService.uploadFile(inputStream, fileName);
                    inputStream.close();
                    out.close();
                    mocWidgetsVO.setObjectStorageId(storageId);
                } else {
                    // 读取
                    br = new BufferedReader(new InputStreamReader(zipInputStream));
                    StringBuffer json = new StringBuffer();
                    String line = null;
                    // 内容不为空,输出
                    while ((line = br.readLine()) != null) {
                        json.append(line);
                    }
                    mocWidgetsVO.setUrl(path + fileName);
                    mocWidgetsVO.setJson(json.toString());
                }

                if (StringUtils.isNotBlank(mocWidgetsVO.getUrl())
                        && StringUtils.isNotBlank(mocWidgetsVO.getObjectStorageId())) {
                    widgetList.add(mocWidgetsVO);
                }
            }
        }
        zipInputStream.closeEntry();

        List<String> widgetIdList = (List<String>) getGenIdList(widgetList.size()).getT();
        for (int i = 0; i < widgetList.size(); i++) {
            widgetList.get(i).setWidgetId(widgetIdList.get(i));
        }
        int flag = mocWidgetsMapper.batchInsert(widgetList);
        if (flag > 0) {
            return ErrorCode.Success;
        } else {
            return ErrorCode.Failure;
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值