/// <summary>
        /// 大文件上传开始
        /// </summary>
        /// <param name="model">SaveBigFileInitModel</param>
        public UploadFileRes UploadBigFileInit(SaveBigFileInitModel model)
        {
            UploadFileRes uploadFileRes = new UploadFileRes();

            try
            {
                var handler = new WebRequestHandler();
                handler.ServerCertificateValidationCallback = delegate { return(true); };
                using (var httpClient = new HttpClient(handler))
                {
                    httpClient.DefaultRequestHeaders.Add("Authorization", model.TokenId);

                    // 文件body
                    var json = "{\"docid\":\"" + model.Docid + "\",\"name\":\"" + model.FileName + "\",\"length\":" + model.Length + ",\"ondup\":" + model.Ondup + "}";

                    var content = new StringContent(json, Encoding.UTF8, "application/json");
                    var res     = httpClient.PostAsync($"{Constant.OAuth2Url}/api/efast/v1/file/osinitmultiupload", content).Result;
                    var resStr  = res.Content.ReadAsStringAsync().Result;

                    int resCode = (int)res.StatusCode;
                    // 若为错误返回码则抛出异常
                    if (resCode < 200 || resCode >= 300)
                    {
                        var errModel = JsonConvert.DeserializeObject <ErrorModel>(resStr);
                        _log.Debug($"UploadBigFile Osinitmultiupload Exception: {errModel.cause}, Code: {errModel.code}");
                        uploadFileRes.ErrorDetail = JsonConvert.SerializeObject(errModel.detail);
                        uploadFileRes.ErrorCode   = errModel.code;
                        return(uploadFileRes);
                    }
                    var uModel = JsonConvert.DeserializeObject <BeginUploadModel>(resStr);
                    uploadFileRes.FileName = JsonConvert.SerializeObject(uModel);
                }
                return(uploadFileRes);
            }
            catch (Exception ex)
            {
                _log.Debug($"UploadBigFile Exception: {ex.Message}");
                throw ex;
            }
        }
        /// <summary>
        /// 大文件上传发送
        /// </summary>
        /// <param name="model">SaveBigFileModel</param>
        public UploadFileRes UploadBigFileSend(SaveBigFileSendModel model)
        {
            UploadFileRes uploadFileRes = new UploadFileRes();

            try
            {
                var handler = new WebRequestHandler();
                handler.ServerCertificateValidationCallback = delegate { return(true); };
                using (var httpClient = new HttpClient(handler))
                {
                    httpClient.DefaultRequestHeaders.Add("Authorization", model.TokenId);

                    Dictionary <string, List <object> > partInfo = new Dictionary <string, List <object> >();
                    if (!string.IsNullOrEmpty(model.PartsInfo))
                    {
                        partInfo = JsonConvert.DeserializeObject <Dictionary <string, List <object> > >(model.PartsInfo);
                    }
                    OSSAPIHelper ossHttpHelper = new OSSAPIHelper();

                    var json2    = "{\"docid\":\"" + model.Docid + "\",\"rev\":\"" + model.Rev + "\",\"uploadid\":\"" + model.UploadId + "\",\"partinfo\":" + JsonConvert.SerializeObject(partInfo) + "}";
                    var content2 = new StringContent(json2, Encoding.UTF8, "application/json");
                    var res2     = httpClient.PostAsync($"{Constant.OAuth2Url}/api/efast/v1/file/oscompleteupload", content2).Result;
                    var resStr2  = res2.Content.ReadAsStringAsync().Result;

                    int resCode2 = (int)res2.StatusCode;
                    // 若为错误返回码则抛出异常
                    if (resCode2 < 200 || resCode2 >= 300)
                    {
                        var errModel = JsonConvert.DeserializeObject <ErrorModel>(resStr2);
                        _log.Debug($"UploadBigFileSend Oscompleteupload Exception: {errModel.cause}, Code: {errModel.code}");
                        uploadFileRes.ErrorDetail = JsonConvert.SerializeObject(errModel.detail);
                        uploadFileRes.ErrorCode   = errModel.code;
                        return(uploadFileRes);
                    }

                    var resultsJson = resStr2.Split(new string[] { "\r\n\r\n" }, StringSplitOptions.None);
                    var bodyJson    = resultsJson[1].Split(new string[] { "--" }, StringSplitOptions.None).FirstOrDefault();
                    var headersJson = resultsJson[2].Split(new string[] { "--" }, StringSplitOptions.None).FirstOrDefault();

                    byte[]        body        = Encoding.UTF8.GetBytes(bodyJson);
                    JObject       returnJson  = (JObject)JsonConvert.DeserializeObject(headersJson);
                    JArray        authRequest = (JArray)returnJson["authrequest"];
                    string        method      = (string)authRequest[0];
                    string        url         = (string)authRequest[1];
                    List <string> resHeaders  = new List <string>();
                    for (int i = 2; i < authRequest.Count; i++)
                    {
                        resHeaders.Add((string)authRequest[i]);
                    }

                    var sendR = ossHttpHelper.SendReqToOSS(method, url, resHeaders, body);
                    sendR.Close();

                    string sendJson    = "{\"docid\":\"" + model.Docid + "\",\"rev\":\"" + model.Rev + "\"}";
                    var    sendContent = new StringContent(sendJson, Encoding.UTF8, "application/json");
                    var    sendRes     = httpClient.PostAsync($"{Constant.OAuth2Url}/api/efast/v1/file/osendupload", sendContent).Result;
                    var    sendResStr  = sendRes.Content.ReadAsStringAsync().Result;

                    int sendResCode = (int)sendRes.StatusCode;
                    // 若为错误返回码则抛出异常
                    if (sendResCode < 200 || sendResCode >= 300)
                    {
                        var errModel = JsonConvert.DeserializeObject <ErrorModel>(sendResStr);
                        _log.Debug($"UploadBigFileSend Osendupload Exception: {errModel.cause}, Code: {errModel.code}");
                        uploadFileRes.ErrorDetail = JsonConvert.SerializeObject(errModel.detail);
                        uploadFileRes.ErrorCode   = errModel.code;
                        return(uploadFileRes);
                    }
                    uploadFileRes.FileName = model.FileName;
                    uploadFileRes.FileId   = model.Docid;
                }
                return(uploadFileRes);
            }
            catch (Exception ex)
            {
                _log.Debug($"UploadBigFileSend Exception: {ex.Message}");
                throw ex;
            }
        }
        /// <summary>
        /// 大文件上传
        /// </summary>
        /// <param name="model">SaveBigFileModel</param>
        public UploadFileRes UploadBigFile(SaveBigFileModel model)
        {
            UploadFileRes uploadFileRes = new UploadFileRes();

            try
            {
                var handler = new WebRequestHandler();
                handler.ServerCertificateValidationCallback = delegate { return(true); };
                using (var httpClient = new HttpClient(handler))
                {
                    httpClient.DefaultRequestHeaders.Add("Authorization", model.TokenId);

                    byte[] buf       = model.FileBytes;
                    int    writeSize = buf.Length; // 记录当前块写入的字节
                    Dictionary <string, List <object> > partInfo = new Dictionary <string, List <object> >();
                    if (!string.IsNullOrEmpty(model.PartsInfo))
                    {
                        partInfo = JsonConvert.DeserializeObject <Dictionary <string, List <object> > >(model.PartsInfo);
                    }

                    // 文件body
                    var json1 = "{\"docid\":\"" + model.Docid + "\",\"rev\":\"" + model.Rev + "\",\"uploadid\":\"" + model.UploadId + "\",\"parts\":\"" + model.PartIndex + "\"}";

                    var content1 = new StringContent(json1, Encoding.UTF8, "application/json");
                    var res1     = httpClient.PostAsync($"{Constant.OAuth2Url}/api/efast/v1/file/osuploadpart", content1).Result;
                    var resStr1  = res1.Content.ReadAsStringAsync().Result;
                    int resCode1 = (int)res1.StatusCode;
                    // 若为错误返回码则抛出异常
                    if (resCode1 < 200 || resCode1 >= 300)
                    {
                        var errModel = JsonConvert.DeserializeObject <ErrorModel>(resStr1);
                        _log.Debug($"UploadBigFile Osuploadpart Exception: {errModel.cause}, Code: {errModel.code}");
                        uploadFileRes.ErrorDetail = JsonConvert.SerializeObject(errModel.detail);
                        uploadFileRes.ErrorCode   = errModel.code;
                        return(uploadFileRes);
                    }

                    var jResult = JsonConvert.DeserializeObject <AuthRequestsModel>(resStr1);
                    var results = JsonConvert.DeserializeObject <Dictionary <string, List <string> > >(jResult.authrequests.ToString());

                    List <string> headers         = new List <string>();
                    List <string> authRequestList = new List <string>();
                    results.TryGetValue(model.PartIndex.ToString(), out authRequestList);
                    for (int i = 2; i < authRequestList.Count; ++i)
                    {
                        string header = authRequestList[i];
                        headers.Add(header);
                    }

                    string       etag          = null;
                    OSSAPIHelper ossHttpHelper = new OSSAPIHelper();

                    // 文件块上传
                    using (HttpWebResponse ossResult = ossHttpHelper.SendReqToOSS(authRequestList[0], authRequestList[1], headers, buf))
                    {
                        // 获取etag,由于报头中"etag"可能为"Etag","ETag","ETAG"等情况,故这里对报头key值进行遍历,将key值变为大写后与"ETAG"进行比较,若相等则让etag等于其value,退出循环。
                        WebHeaderCollection headerArray = ossResult.Headers;
                        for (int i = 0; i < headerArray.Count; ++i)
                        {
                            string key = headerArray.GetKey(i);
                            if (key.ToUpper().Equals("ETAG"))
                            {
                                etag = headerArray[key];
                                i    = headerArray.Count;
                            }
                        }
                    }

                    List <object> tempList = new List <object>();
                    tempList.Add(etag);
                    tempList.Add(writeSize);
                    partInfo.Add(model.PartIndex.ToString(), tempList);

                    uploadFileRes.FileName = JsonConvert.SerializeObject(partInfo);
                    return(uploadFileRes);
                }
            }
            catch (Exception ex)
            {
                _log.Debug($"UploadBigFile Exception: {ex.Message}");
                throw ex;
            }
        }
        /// <summary>
        /// 文件上传
        /// </summary>
        /// <param name="model">SaveFileModel</param>
        public UploadFileRes UploadFile(SaveFileModel model)
        {
            UploadFileRes uploadFileRes = new UploadFileRes();

            try
            {
                var handler = new WebRequestHandler();
                handler.ServerCertificateValidationCallback = delegate { return(true); };
                using (var httpClient = new HttpClient(handler))
                {
                    httpClient.DefaultRequestHeaders.Add("Authorization", model.TokenId);

                    // 文件body
                    byte[] body = model.Base64Str;
                    var    json = "{\"docid\":\"" + model.Docid + "\",\"name\":\"" + model.FileName.Trim() + "\",\"length\":" + body.Length + ",\"ondup\":" + model.Ondup + "}";

                    var content = new StringContent(json, Encoding.UTF8, "application/json");
                    var res     = httpClient.PostAsync($"{Constant.OAuth2Url}/api/efast/v1/file/osbeginupload", content).Result;
                    var resStr  = res.Content.ReadAsStringAsync().Result;

                    int resCode = (int)res.StatusCode;
                    // 若为错误返回码则抛出异常
                    if (resCode < 200 || resCode >= 300)
                    {
                        var errModel = JsonConvert.DeserializeObject <ErrorModel>(resStr);
                        _log.Debug($"UploadFile Osbeginupload Exception: {errModel.cause}, Code: {errModel.code}");
                        uploadFileRes.ErrorDetail = JsonConvert.SerializeObject(errModel.detail);
                        uploadFileRes.ErrorCode   = errModel.code;
                        return(uploadFileRes);
                    }

                    var    dynamicObj = JsonConvert.DeserializeObject <dynamic>(resStr);
                    string method     = dynamicObj["authrequest"][0].Value;
                    string url        = dynamicObj["authrequest"][1].Value;
                    string rev        = dynamicObj["rev"].Value;
                    string docid      = dynamicObj["docid"].Value;
                    uploadFileRes.FileId   = docid;
                    uploadFileRes.FileName = model.FileName.Trim();

                    List <string> headers = new List <string>();
                    for (int i = 2; i < dynamicObj["authrequest"].Count; ++i)
                    {
                        headers.Add(dynamicObj["authrequest"][i].Value);
                    }

                    OSSAPIHelper    ossHttpHelper = new OSSAPIHelper();
                    HttpWebResponse ossResult     = ossHttpHelper.SendReqToOSS(method, url, headers, body);
                    int             oosCode       = (int)ossResult.StatusCode;

                    // 若为错误返回码则抛出异常
                    if (oosCode < 200 || oosCode >= 300)
                    {
                        Stream resStream = ossResult.GetResponseStream();
                        string errBody   = string.Empty;
                        using (StreamReader reader = new StreamReader(resStream, Encoding.UTF8))
                        {
                            errBody = reader.ReadToEnd();
                        }
                        var errModel = JsonConvert.DeserializeObject <ErrorModel>(errBody);
                        _log.Debug($"UploadFile SendReqToOSS Exception: {errModel.cause}");
                        uploadFileRes.ErrorDetail = JsonConvert.SerializeObject(errModel.detail);
                        uploadFileRes.ErrorCode   = errModel.code;
                        ossResult.Close();
                        return(uploadFileRes);
                    }
                    ossResult.Close();

                    string sendJson    = "{\"docid\":\"" + docid + "\",\"rev\":\"" + rev + "\"}";
                    var    sendContent = new StringContent(sendJson, Encoding.UTF8, "application/json");
                    var    sendRes     = httpClient.PostAsync($"{Constant.OAuth2Url}/api/efast/v1/file/osendupload", sendContent).Result;
                    var    sendResStr  = sendRes.Content.ReadAsStringAsync().Result;

                    int sendCode = (int)sendRes.StatusCode;
                    // 若为错误返回码则抛出异常
                    if (sendCode < 200 || sendCode >= 300)
                    {
                        var errModel = JsonConvert.DeserializeObject <ErrorModel>(sendResStr);
                        _log.Debug($"UploadFile Oosendupload Exception: {errModel.cause}");
                        uploadFileRes.ErrorDetail = JsonConvert.SerializeObject(errModel.detail);
                        uploadFileRes.ErrorCode   = errModel.code;
                        return(uploadFileRes);
                    }
                }
                return(uploadFileRes);
            }
            catch (Exception ex)
            {
                _log.Debug($"UploadFile Exception: {ex.Message}");
                throw ex;
            }
        }