All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.aiwiown.face.ApiConstants Maven / Gradle / Ivy

There is a newer version: 3.0.9
Show newest version
/**
 * Alipay.com Inc. Copyright (c) 2004-2012 All Rights Reserved.
 */
package com.aiwiown.face;

import com.aiwiown.face.internal.util.StringUtils;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author runzhi
 */
public class ApiConstants {

    public static final String SIGN_TYPE = "sign_type";

    public static final String SIGN_TYPE_RSA = "RSA";

    /**
     * sha256WithRsa 算法请求类型
     */
    public static final String SIGN_TYPE_RSA2 = "RSA2";

    public static final String SHA_TYPE = "SHA1";

    public static final String SHA_TYPE256 = "SHA256";

    public static final String SIGN_TYPE_SM2 = "SM2";

    public static final String SIGN_ALGORITHMS = "SHA1WithRSA";

    public static final String SIGN_SHA256RSA_ALGORITHMS = "SHA256WithRSA";

    public static final String ENCRYPT_TYPE_AES = "AES";

    public static final String APP_ID = "app_id";

    public static final String TARGET_APP_ID = "target_app_id";

    public static final String FORMAT = "format";

    public static final String METHOD = "method";

    public static final String TIMESTAMP = "timestamp";

    public static final String VERSION = "version";

    public static final String SIGN = "sign";

    public static final String ACCESS_TOKEN = "auth_token";

    public static final String APP_AUTH_TOKEN = "app_auth_token";

    public static final String TERMINAL_TYPE = "terminal_type";

    public static final String TERMINAL_INFO = "terminal_info";

    public static final String CHARSET = "charset";

    public static final String NOTIFY_URL = "notify_url";

    public static final String RETURN_URL = "return_url";

    public static final String ENCRYPT_TYPE = "encrypt_type";

    public static final String APP_CERT_SN = "app_cert_sn";

    //-----===-------///

    public static final String BIZ_CONTENT_KEY = "biz_content";

    /**
     * 默认时间格式
     **/
    public static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";

    /**
     * Date默认时区
     **/
    public static final String DATE_TIMEZONE = "GMT+8";

    /**
     * UTF-8字符集
     **/
    public static final String CHARSET_UTF8 = "UTF-8";

    /**
     * GBK字符集
     **/
    public static final String CHARSET_GBK = "GBK";

    /**
     * JSON 应格式
     */
    public static final String FORMAT_JSON = "json";

    /**
     * XML 应格式
     */
    public static final String FORMAT_XML = "xml";

    /**
     * SDK版本号
     */
    public static final String SDK_VERSION = "";

    /**
     * httpCode对应的错误描述信息
     * httpCode信息直接返回语言描述信息
     */
    private static final Map HTTP_ERROR_MESSAGE_MAP = new HashMap<>();

    /**
     * 请求成功,认证不成功返回的错误描述信息,当前对象在应用服务使用即可
     * 业务相关信息在各自业务处理,不会返回,只定义而已
     */
    private static final Map RESULT_ERROR_MESSAGE_MAP = new HashMap<>();

    /**
     * 字段正则校验  异常前缀匹配
     */
    private static final Map RESULT_PREFIX_ERROR_MESSAGE_MAP = new HashMap<>();

    /**
     * 获取错误信息
     *
     * @param code 异常编码
     * @return 错误描述
     */
    public static String getCodeMessage(String code) {
        String message = HTTP_ERROR_MESSAGE_MAP.get(code);
        if (StringUtils.isEmpty(message)) {
            message = RESULT_ERROR_MESSAGE_MAP.get(code);
        }
        if (StringUtils.isEmpty(message)) {
            Set prefixs = RESULT_PREFIX_ERROR_MESSAGE_MAP.keySet();
            for (String prefix : prefixs) {
                Pattern pattern = Pattern.compile(prefix);
                Matcher matcher = pattern.matcher(code);
                if (!matcher.find()) {
                    //未查询到继续
                    continue;
                }
                message = RESULT_PREFIX_ERROR_MESSAGE_MAP.get(prefix);
                message = String.format(message, matcher.replaceAll(""));
            }
        }
        return message;
    }

    static {
        HTTP_ERROR_MESSAGE_MAP.put("IMAGE_ERROR_UNSUPPORTED_FORMAT", "自拍图像无法正确解析,有可能不是一个图像文件、或有数据破损。");
        HTTP_ERROR_MESSAGE_MAP.put("IMAGE_ERROR_UNSUPPORTED_FORMAT: data_source", "参考数据的图片无法解析、或者参考数据没有照片。");
        HTTP_ERROR_MESSAGE_MAP.put("IMAGE_ERROR_UNSUPPORTED_FORMAT: facetoken", "请使用接口 detect 后获得的facetoken");
        HTTP_ERROR_MESSAGE_MAP.put("IMAGE_ERROR_UNSUPPORTED_FORMAT: image", "image中没有人脸或图片解析失败");
        HTTP_ERROR_MESSAGE_MAP.put("IMAGE_ERROR_UNSUPPORTED_FORMAT: image_ref1", "参数 image_ref1 对应的图像无法解析,有可能不是图像文件、或有数据破损。");
        HTTP_ERROR_MESSAGE_MAP.put("IMAGE_ERROR_UNSUPPORTED_FORMAT: image_ref2", "参数 image_ref2 对应的图像无法解析,有可能不是图像文件、或有数据破损。");
        HTTP_ERROR_MESSAGE_MAP.put("IMAGE_ERROR_UNSUPPORTED_FORMAT: image_ref3", "参数 image_ref3 对应的图像无法解析,有可能不是图像文件、或有数据破损。");
        HTTP_ERROR_MESSAGE_MAP.put("NO_FACE_FOUND", "表示上传的 image_ref[x] 的图像中,没有检测到人脸。");
        HTTP_ERROR_MESSAGE_MAP.put("NO_FACE_FOUND: data_source", "没有检测到人脸。");
        HTTP_ERROR_MESSAGE_MAP.put("NO_FACE_FOUND: image_ref1", "上传的 image_ref1 的图像中,没有检测到人脸。");
        HTTP_ERROR_MESSAGE_MAP.put("NO_FACE_FOUND: image_ref2", "上传的 image_ref2 的图像中,没有检测到人脸。");
        HTTP_ERROR_MESSAGE_MAP.put("NO_FACE_FOUND: image_ref3", "上传的 image_ref3 的图像中,没有检测到人脸。");
        HTTP_ERROR_MESSAGE_MAP.put("INVALID_IMAGE_SIZE: image", "图片的像素不符合要求,图片像素多大或者过小");
        HTTP_ERROR_MESSAGE_MAP.put("INVALID_IMAGE_SIZE: image_ref1", "客户上传的图像 image_ref1 太大,具体是指像素尺寸的长或宽超过4096像素。");
        HTTP_ERROR_MESSAGE_MAP.put("INVALID_IMAGE_SIZE: image_ref2", "客户上传的图像 image_ref2 太大,具体是指像素尺寸的长或宽超过4096像素。");
        HTTP_ERROR_MESSAGE_MAP.put("INVALID_IMAGE_SIZE: image_ref3", "客户上传的图像 image_ref3 太大,具体是指像素尺寸的长或宽超过4096像素。");
        HTTP_ERROR_MESSAGE_MAP.put("AUTHORIZATION_ERROR", "客户身份信息验证不通过");
        HTTP_ERROR_MESSAGE_MAP.put("AUTHORIZATION_ERROR: API_KEY_BE_DISCONTINUED", "api_key被停用");
        HTTP_ERROR_MESSAGE_MAP.put("AUTHORIZATION_ERROR: IP_NOT_ALLOWED", "不允许访问的IP");
        HTTP_ERROR_MESSAGE_MAP.put("AUTHORIZATION_ERROR: LIMIT_REACHED", "这个api_key对当前API的调用量达到上限。仅当api_key为测试key");
        HTTP_ERROR_MESSAGE_MAP.put("AUTHORIZATION_ERROR: MORE_RETRY_TIMES", "比对重试次数达到上限");
        HTTP_ERROR_MESSAGE_MAP.put("AUTHORIZATION_ERROR: NO_VERIFY_PERMISSION", "没有人脸比对的权限,但是本次请求依然尝试调用了。");
        HTTP_ERROR_MESSAGE_MAP.put("AUTHORIZATION_ERROR: NO_DATA_SOURCE_PERMISSION", "没有KYC验证的权限,但是本次请求依然尝试调用了。");
        HTTP_ERROR_MESSAGE_MAP.put("AUTHORIZATION_ERROR: No data source permission.", "仅为FaceID Verify API存在,表示使用“KYC验证”的方式调用FaceID Verify API,但是没有“KYC验证”的权限");
        HTTP_ERROR_MESSAGE_MAP.put("AUTHORIZATION_ERROR: DENIED", "无权限调用当前API");
        HTTP_ERROR_MESSAGE_MAP.put("AUTHORIZATION_ERROR: DENIED.", "无权限调用当前API");
        HTTP_ERROR_MESSAGE_MAP.put("AUTHORIZATION_ERROR: Denied.", "api_key无权限或被停用");
        HTTP_ERROR_MESSAGE_MAP.put("AUTHORIZATION_ERROR: Denied by Client", "用户自己禁止该api_key调用");
        HTTP_ERROR_MESSAGE_MAP.put("AUTHORIZATION_ERROR: Denied by Admin", "管理员禁止该api_key调用");
        HTTP_ERROR_MESSAGE_MAP.put("AUTHORIZATION_ERROR: Insufficient Account Balance", "由于账户余额不足禁止调用");
        HTTP_ERROR_MESSAGE_MAP.put("AUTHORIZATION_ERROR: Limit reached.", "这个api_key对当前API的调用量达到上限。仅当api_key为测试key时返回");
        HTTP_ERROR_MESSAGE_MAP.put("AUTHORIZATION_ERROR: EXPIRED_SIGN", "签名已过期");
        HTTP_ERROR_MESSAGE_MAP.put("AUTHORIZATION_ERROR: INVALID_SIGN", "无效签名");
        HTTP_ERROR_MESSAGE_MAP.put("LOW_QUALITY", "image图质量太差");
        HTTP_ERROR_MESSAGE_MAP.put("MULTIPLE_FACES", "image图片中的有多张人脸");
        HTTP_ERROR_MESSAGE_MAP.put("MULTIPLE_FACES: image", "参数 image 对应的图像检测到了多张人脸");
        HTTP_ERROR_MESSAGE_MAP.put("MULTIPLE_FACES: image_ref1", "参数 image_ref1 对应的图像检测到了多张人脸");
        HTTP_ERROR_MESSAGE_MAP.put("MULTIPLE_FACES: image_ref2", "参数 image_ref2 对应的图像检测到了多张人脸");
        HTTP_ERROR_MESSAGE_MAP.put("MULTIPLE_FACES: image_ref3", "参数 image_ref3 对应的图像检测到了多张人脸");
        HTTP_ERROR_MESSAGE_MAP.put("AUTHENTICATION_ERROR", "api_key和api_secret不匹配。");
        HTTP_ERROR_MESSAGE_MAP.put("CONCURRENCY_LIMIT_EXCEEDED", "并发数超过限制");
        HTTP_ERROR_MESSAGE_MAP.put("API_NOT_FOUND", "所调用的API不存在。");
        HTTP_ERROR_MESSAGE_MAP.put("INTERNAL_ERROR", "服务器内部错误,当此类错误发生时请再次请求,如果持续出现此类错误,请及时联系 FaceID/Face++ 客服或商务");
        HTTP_ERROR_MESSAGE_MAP.put("MEGLIVE_DATA_ERROR", "上传的meglive_data数据包解析失败。请将SDK产生的meglive_data数据包直接传递到此API,任何对数据包的修改都会导致数据包解析失败的问题。");
        HTTP_ERROR_MESSAGE_MAP.put("MEGLIVE_DATA_BIZ_TOKEN_NOT_MATCH", "上传的meglive_data包中的biz_token和传入参数biz_token不一致。");
        HTTP_ERROR_MESSAGE_MAP.put("INVALID_NAME_FORMAT", "KYC验证时,idcard_name参数字符数过多(多于32字符)、或者使用错误的编码(姓名要求以UTF-8编码)。");
        HTTP_ERROR_MESSAGE_MAP.put("INVALID_IDCARD_NUMBER", "人脸比对时,idcard_number参数不是正确的证件号码格式。证件号码必定为18位数字,且最后一位可以是X(大小写均可)。");
        HTTP_ERROR_MESSAGE_MAP.put("RESULT_NOT_FOUND", "此错误类型表示传入的业务编号错误。");
        HTTP_ERROR_MESSAGE_MAP.put("DATA_DESTROYED", "超过可查询时间或超过最多可查询次数");
        HTTP_ERROR_MESSAGE_MAP.put("INVALID_TOKEN", "参数所对应调用Raw-GetRandomNumber API的token_random_number不存在、或格式错误、或已过期、或并非通过一个API Key调用的Raw-GetRandomNumber API返回的token_random_number。");
        HTTP_ERROR_MESSAGE_MAP.put("VIDEO_FACE_NOT_FOUND", "上传的视频中没有检测到人脸");
        HTTP_ERROR_MESSAGE_MAP.put("VIDEO_LOW_FACE_QUALITY", "上传的视频中人脸质量太差");
        HTTP_ERROR_MESSAGE_MAP.put("VIDEO_INVALID_DURATION", "上传的视频时长不对");
        HTTP_ERROR_MESSAGE_MAP.put("VIDEO_NO_AUDIO", "上传视频中没有音轨,通常是由于手机的录音权限没有打开或者受到阻止");
        HTTP_ERROR_MESSAGE_MAP.put("VIDEO_UNSUPPORTED_FORMAT", "视频无法解析,有可能是ffmpeg不支持的格式或视频有破损");
        HTTP_ERROR_MESSAGE_MAP.put("FACE_BLURRED", "人脸太模糊,不适宜比对。");
        HTTP_ERROR_MESSAGE_MAP.put("FACE_POOR_LIGHT", "人脸区过亮或过暗,不适宜比对。");
        HTTP_ERROR_MESSAGE_MAP.put("FACE_NOT_FRONT", "自拍图像中的人脸非正面朝向。正面朝向是指:面部无明显的左右上下倾斜,上下不颠倒。");
        HTTP_ERROR_MESSAGE_MAP.put("FACE_NOT_PROPER_POSITION", "人脸位置不合适。理想情况是人脸在画面中央,人脸包围盒的长宽分别是画面长宽的三分之一。如果实际情况偏离理想情况太多,就会触发错误,比如人脸太小或太大或位置太偏,以致于不适宜后续的活体判定和人脸比对。");
        HTTP_ERROR_MESSAGE_MAP.put("FACE_NOT_SIDE", "自拍图像中的人脸非合适的侧脸照。合适的侧脸照,是指面部左右转动在15度-45度之间,面部无明显的上仰下俯,否则就会被判定为此错误。");
        HTTP_ERROR_MESSAGE_MAP.put("NO_SUCH_ID_NUMBER", "KYC验证时,参考数据中没有此身份证号码的记录。");
        HTTP_ERROR_MESSAGE_MAP.put("ID_NUMBER_NAME_NOT_MATCH", "证件号码和姓名不匹配");
        HTTP_ERROR_MESSAGE_MAP.put("DATA_SOURCE_ERROR", "KYC验证时,verify方法调用参考数据发生错误,一般来说是参考数据出错。出现此错误时建议停止业务,并立即联系FaceID客服或商务,待确定参考数据正常后再开启业务。");
        HTTP_ERROR_MESSAGE_MAP.put("ID_CARD_NOT_FOUND", "图片中没有找到身份证。");
        HTTP_ERROR_MESSAGE_MAP.put("MAGE_ERROR_UNSUPPORTED_FORMAT: image", "图片解析失败");
        HTTP_ERROR_MESSAGE_MAP.put("IDCARD_NO_PHOTO", "数据返回的图片无法解析、或者没有照片");
        HTTP_ERROR_MESSAGE_MAP.put("DATA_VALIDATION_ERROR", "配合MegLive SDK使用时,delta 参数的校验数据与上传的图像无法一一对应,或者图像上传不完整。");
        HTTP_ERROR_MESSAGE_MAP.put("DELTA_USED", "配合MegLive SDK使用时,系统检验出delta已被使用过。此错误仅当客户设置了可选参数check_delta且delta确实被使用过时才触发错误返回,其他情况下不触发此错误信息");
        HTTP_ERROR_MESSAGE_MAP.put("MEGLIVE_BIZ_NO_USED", "配合MegLiveFlash SDK使用时,需要通过一个 meglive_biz_no 进行算法初始化。如果使用重复的 meglive_biz_no ,并将生成的结果上传至 verify 接口调用,则会返回此错误。");
        HTTP_ERROR_MESSAGE_MAP.put("Request Entity Too Large", "客户发送的请求大小超过了20MB限制。该错误的返回格式为纯文本,不是json格式。");
        HTTP_ERROR_MESSAGE_MAP.put("COEXISTENCE_ARGUMENTS", "同时传入了要求是二选一或多选一的参数。如有特殊说明则不返回此错误。");
        HTTP_ERROR_MESSAGE_MAP.put("INVALID_FACE_TOKEN", "face_token无效");
        HTTP_ERROR_MESSAGE_MAP.put("IMAGE_DOWNLOAD_TIMEOUT", "下载图片超时");
        HTTP_ERROR_MESSAGE_MAP.put("INVALID_OUTER_ID", "outer_id无效");
        HTTP_ERROR_MESSAGE_MAP.put("INVALID_FACESET_TOKEN", "faceset_token无效");
        HTTP_ERROR_MESSAGE_MAP.put("EMPTY_FACESET", "FaceSet 中没有 face_token");
        HTTP_ERROR_MESSAGE_MAP.put("INVALID_FACE_TOKENS_SIZE", "face_tokens数组长度不符合要求");
        HTTP_ERROR_MESSAGE_MAP.put("FACESET_EXIST", "想要创建的 FaceSet 已经存在(当提供了一个当前存储空间内下已存在的 outer_id,且 force_merge 为0时)");
        HTTP_ERROR_MESSAGE_MAP.put("FACESET_QUOTA_EXCEEDED", "FaceSet 数量达到上限,不能继续创建 FaceSet");
        HTTP_ERROR_MESSAGE_MAP.put("FACESET_NOT_EMPTY", "FaceSet不为空,不能删除(设置check_empty=1时)");
        HTTP_ERROR_MESSAGE_MAP.put("NEW_OUTER_ID_EXIST", "提供的new_outer_id与已有outer_id重复");
        HTTP_ERROR_MESSAGE_MAP.put("IMAGE_FILE_TOO_LARGE", "客户上传的图像文件太大。本 API 要求图片文件大小不超过 2 MB");
        HTTP_ERROR_MESSAGE_MAP.put("MISMATCH_TEMPLATE", "不匹配指定模版,可能的原因包括:非模版的图片,未检测到文字或者文字较少,图片质量较差,图片模糊,光线较暗等");
        HTTP_ERROR_MESSAGE_MAP.put("INVALID_TEMPID", "TemplateID无效或未找到对应的生效模板");


        RESULT_ERROR_MESSAGE_MAP.put("SUCCESS", "待比对照片与其他照对比均是同一个人");
        RESULT_ERROR_MESSAGE_MAP.put("PASS_LIVING_NOT_THE_SAME", "通过了活体检测,但是经过验证,待比对照片与其他照片中的至少一张,不是同一个人");
        RESULT_ERROR_MESSAGE_MAP.put("NO_ID_CARD_NUMBER", "参考数据错误,可能原因:无此身份证号、照片格式错误、照片中找不到人脸等可能");
        RESULT_ERROR_MESSAGE_MAP.put("ID_NUMBER_NAME_NOT_MATCH", "证件号码和姓名不匹配");
        RESULT_ERROR_MESSAGE_MAP.put("NO_FACE_FOUND", "参考数据错误,可能原因:无此身份证号、照片格式错误、照片中找不到人脸等可能");
        RESULT_ERROR_MESSAGE_MAP.put("NO_ID_PHOTO", "参考数据错误,可能原因:无此身份证号、照片格式错误、照片中找不到人脸等可能");
        RESULT_ERROR_MESSAGE_MAP.put("PHOTO_FORMAT_ERROR", "参考数据错误,可能原因:无此身份证号、照片格式错误、照片中找不到人脸等可能");
        RESULT_ERROR_MESSAGE_MAP.put("DATA_SOURCE_ERROR", "参考数据出现错误");
        RESULT_ERROR_MESSAGE_MAP.put("FAIL_LIVING_FACE_ATTACK", "未经过活体判断,可能的原因:是假脸攻击");
        RESULT_ERROR_MESSAGE_MAP.put("VIDEO_LACK_FRAMES", "获取到的活体数据故障,请换一台手机重试");
        RESULT_ERROR_MESSAGE_MAP.put("FAIL_EYES_CLOSE_DETECTION", "未通过闭眼检测,活体失败");
        RESULT_ERROR_MESSAGE_MAP.put("BIZ_TOKEN_DENIED", "传入的 biz_token 不符合要求");
        RESULT_ERROR_MESSAGE_MAP.put("AUTHENTICATION_FAIL", "鉴权失败");
        RESULT_ERROR_MESSAGE_MAP.put("MOBILE_PHONE_NOT_SUPPORT", "手机在不支持列表里");
        RESULT_ERROR_MESSAGE_MAP.put("SDK_TOO_OLD", "SDK版本过旧,已经不被支持");
        RESULT_ERROR_MESSAGE_MAP.put("MOBILE_PHONE_NO_AUTHORITY", "没有权限(运动传感器、存储、相机)");
        RESULT_ERROR_MESSAGE_MAP.put("USER_CANCELLATION", "用户活体失败,原因可能如下:用户取消了、验证过程超时等原因;");
        RESULT_ERROR_MESSAGE_MAP.put("USER_TIMEOUT", "用户活体失败,原因可能如下:用户取消了、验证过程超时等原因;");
        RESULT_ERROR_MESSAGE_MAP.put("VERIFICATION_FAILURE", "用户活体失败,原因可能如下:用户取消了、验证过程超时等原因;");
        RESULT_ERROR_MESSAGE_MAP.put("UNDETECTED_FACE", "用户活体失败,原因可能如下:用户取消了、验证过程超时等原因;");
        RESULT_ERROR_MESSAGE_MAP.put("ACTION_ERROR", "用户活体失败,原因可能如下:用户取消了、验证过程超时等原因;");
        RESULT_ERROR_MESSAGE_MAP.put("GET_CONFIG_FAIL", "用户活体失败,原因:读取配置失败。");
        RESULT_ERROR_MESSAGE_MAP.put("INVALID_IMAGE_URL", "无法从指定的image_url下载图片,图片URL错误或者无效");

        /**===================================正则匹配数据==========================================*/
        RESULT_PREFIX_ERROR_MESSAGE_MAP.put("BAD_ARGUMENTS", "参数解析错误缺少参数 %s");
        RESULT_PREFIX_ERROR_MESSAGE_MAP.put("MISSING_ARGUMENTS", "缺少参数 %s");
        RESULT_PREFIX_ERROR_MESSAGE_MAP.put("RESULT_ERROR_MESSAGE_MAP", "客户通过参数 %s 上传的图片文件太大。本 API 要求图片文件大小不超过 2 MB");
        RESULT_PREFIX_ERROR_MESSAGE_MAP.put("IMAGE_DOWNLOAD_TIMEOUT", "下载图片超时 %s");
        RESULT_PREFIX_ERROR_MESSAGE_MAP.put("INSUFFICIENT_PERMISSION", "试用 API Key 无法使用 %s 对应的参数。请勿传入此参数。或者使用正式 API Key 调用。");
        RESULT_PREFIX_ERROR_MESSAGE_MAP.put("IMAGE_FILE_TOO_LARGE", "客户通过参数 %s 上传的图片文件太大。本 API 要求图片文件大小不超过 2 MB");
        RESULT_PREFIX_ERROR_MESSAGE_MAP.put("INVALID_FACE_TOKEN", "使用face_token作为参数时,所传的face_token不存在。");
        RESULT_PREFIX_ERROR_MESSAGE_MAP.put("INVALID_IMAGE_URL", "无法从指定的 %s 下载图片,图片URL错误或者无效");
        RESULT_PREFIX_ERROR_MESSAGE_MAP.put("INVALID_IMAGE_SIZE", "参数 %s 对应的客户上传的图像像素尺寸太大或太小,图片要求请参照本API描述。");
        RESULT_PREFIX_ERROR_MESSAGE_MAP.put("IMAGE_ERROR_UNSUPPORTED_FORMAT", "参数 %s 对应的图像无法正确解析,有可能不是一个图像文件、或有数据破损。");
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy