接收 base64数据 zip 取出其中 xml 转换对象

@Slf4j
@Component
public class EcgZipUtil {

    @Autowired
    private String storeUrl;

    public File zip(String data) {
        byte[] bytes = Base64.decodeBase64(data.getBytes());
        File path = Paths.get(storeUrl).toFile();
        if (!path.exists()) {
            path.mkdirs();
        }
        File file = FileUtil.file(storeUrl + DateUtil.format(new Date(), "/yyyy-MM-dd_HH_mm_ss") + ".zip");
        try(FileOutputStream out = new FileOutputStream(file);){
            out.write(bytes,0,bytes.length);
            out.flush();
        } catch (IOException e){
            e.printStackTrace();
        }
        return file;
    }

    public EcgFile readXml(File file) {
        EcgFile ecgFile = null;
        try {
            File xmlFile = ZipUtil.unzip(file, CharsetUtil.CHARSET_UTF_8);
            XStream xStream = new XStream(new DomDriver("UTF-8")){
                @Override
                protected MapperWrapper wrapMapper(MapperWrapper next) {
                    return new MapperWrapper(next) {
                        @Override
                        public boolean shouldSerializeMember(Class definedIn, String fieldName) {
                            if (definedIn == Object.class) {
                                return false;
                            }
                            return super.shouldSerializeMember(definedIn, fieldName);
                        }
                    };
                }
            };
            XStream.setupDefaultSecurity(xStream);
            xStream.allowTypes(new Class[]{EcgFile.class, EcgLeadInfoBean.class, EcgLeadListBean.class});
            xStream.processAnnotations(new Class[]{EcgFile.class,EcgLeadInfoBean.class,EcgLeadListBean.class});
            xStream.registerConverter(new XStreamDateConverter());
            xStream.autodetectAnnotations(true);
            ecgFile = (EcgFile) xStream.fromXML(xmlFile.listFiles()[0]);
            file.delete();
            Files.walk(Paths.get(xmlFile.getPath())).sorted(Comparator.reverseOrder()).map(Path::toFile)
                    .peek(System.out::println).forEach(File::delete);
        } catch (UtilException | IOException e) {
            e.printStackTrace();
        }
        return ecgFile;

你可能感兴趣的:(接收 base64数据 zip 取出其中 xml 转换对象)