ApiClientHelper API上传下载

上传下载文件

public static class ApiClientHelper
    {
        /// <summary>
        /// 返回一个设置了基本参数的HttpClient
        /// </summary>
        /// <returns></returns>
        public static HttpClient GetHttpClient()
        {
            var handler = new HttpClientHandler() { }; //UseProxy = true, Proxy = WebRequest.DefaultWebProxy
            if (!string.IsNullOrEmpty(ClientPublicData.LoginToken))
            {
                //把验证需要的token放到cookie中
                handler.CookieContainer = new CookieContainer();
                handler.CookieContainer.Add(new Uri(WebApiClientConfiguration.MyWebApiBaseAddress), new Cookie(WebApiClientConfiguration.TokenCookieName, ClientPublicData.LoginToken));
            }

            //HttpClient httpClient = HttpClientFactory.Create(handler, new LogHandler());
            HttpClient httpClient = HttpClientFactory.Create(handler);
            httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            //httpClient.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("gzip"));
            //httpClient.DefaultRequestHeaders.Add("X-UserAgent", "CSClient");

            httpClient.BaseAddress = new Uri(WebApiClientConfiguration.MyWebApiBaseAddress);
            //httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", AuthorizationValue); //Basic验证方式
            //httpClient.Timeout = new TimeSpan(0, 5, 0);//5分钟超时
            return httpClient;
        }

        /// <summary>
        /// 根据Http状态代码抛出异常
        /// </summary>
        /// <param name="statusCode"></param>
        public static void ThrowException(HttpStatusCode statusCode)
        {
            switch (statusCode)
            {
                case HttpStatusCode.OK:
                    return;//正常代码
                case HttpStatusCode.Unauthorized:
                    throw new UnauthorizedAccessException("请求的资源没有权限,请先登录或联系管理员");
                case HttpStatusCode.NotFound:
                    throw new Exception("请求的资源不在服务器上[404]");
                case HttpStatusCode.RequestTimeout:
                    throw new Exception("请求超时[408]");
                case HttpStatusCode.InternalServerError:
                    throw new Exception("服务器上发生了一般错误[500]");

                default:
                    throw new Exception("请求时发生错误:" + statusCode.ToString() + "[" + (int)statusCode + "]");
            }
        }

        #region 异步方法

        /// <summary>
        /// 封装对服务器url的Post请求
        /// </summary>
        /// <typeparam name="TResult">返回的结果</typeparam>
        /// <param name="url">请求的url地址</param>
        /// <param name="value">请求时传给服务器的参数</param>
        /// <param name="beforeAction">请求前要执行的代码,可为null</param>
        /// <param name="afterAction">请求后要执行的代码,可为null</param>
        /// <param name="isEncrypt">是否加密(1:代表加密,0代表不加密)</param>
        /// <returns></returns>
        public static async Task<TResult> PostAsJsonAsync<TResult>(string url, object value, Action beforeAction = null, Action afterAction = null, int isEncrypt=1)
        {
            url = url.TrimStart('/');
            if (beforeAction != null) beforeAction();
            try
            {
                using (var client = ApiClientHelper.GetHttpClient())
                {

                    client.DefaultRequestHeaders.Add("isEncrypt",isEncrypt.ToString());
                    //时间戳加密
                     string timeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:s");
                     string accessKey = Encryption.MD5Encrypt(Encryption.key + timeStamp);
                     client.DefaultRequestHeaders.Add("timeStamp", timeStamp);
                     client.DefaultRequestHeaders.Add("accessKey", accessKey);
                    
                    string constparam = null;
                    if (isEncrypt==1)
                    {
                        //发送之前数据加密
                        if (value != null)
                        {
                            string param = JsonConvert.SerializeObject(value);
                            constparam = Encryption.Encrypt3DES(param, accessKey);
                        }
                        string baseQuery = string.Empty;
                        int index = url.IndexOf("?", System.StringComparison.Ordinal);
                        if (index != -1)
                        {
                            baseQuery = url.Substring(index + 1);
                            string starturl = url.Substring(0, index + 1);
                            if (!string.IsNullOrEmpty(baseQuery))
                            {
                                baseQuery = Encryption.Encrypt3DES(baseQuery, accessKey);
                                url = starturl + baseQuery;
                            }
                        }
                    }
                    Task<HttpResponseMessage> aTask = client.PostAsJsonAsync<object>(url,isEncrypt==1?constparam:value);
                    HttpResponseMessage response = await aTask;
                    if (response.IsSuccessStatusCode)
                    {
                       string result1 = await response.Content.ReadAsStringAsync();
                        //解密
                        if (isEncrypt == 1)
                        {
                            result1 = Encryption.Decrypt3DES(result1, accessKey);
                        }
                        var result = JsonConvert.DeserializeObject<TResult>(result1);
                       return result;
                    }
                    //response.EnsureSuccessStatusCode();
                    ThrowException(response.StatusCode);
                    throw new Exception("请求时发生错误");
                }
            }
            finally
            {
                if (afterAction != null) afterAction();
            }
        }

        /// <summary>
        /// 封装对服务器url的Get请求
        /// </summary>
        /// <typeparam name="TResult">返回的结果</typeparam>
        /// <param name="url">请求的url地址</param>
        /// <param name="beforeAction">请求前要执行的代码,可为null</param>
        /// <param name="afterAction">请求后要执行的代码,可为null</param>
        /// <param name="isEncrypt">是否加密(1:代表加密,0代表不加密)</param>
        /// <returns></returns>
        public static async Task<TResult> GetAsJsonAsync<TResult>(string url, Action beforeAction = null, Action afterAction = null,int isEncrypt=1)
        {
            url = url.TrimStart('/');
          
            if (beforeAction != null) beforeAction();
            try
            {
                using (var client = ApiClientHelper.GetHttpClient())
                {
                   client.DefaultRequestHeaders.Add("isEncrypt", isEncrypt.ToString());
                   //时间戳加密
                   string timeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:s");
                   string accessKey = Encryption.MD5Encrypt(Encryption.key + timeStamp);
                   client.DefaultRequestHeaders.Add("timeStamp", timeStamp);
                   client.DefaultRequestHeaders.Add("accessKey", accessKey);
                    if (isEncrypt == 1)
                    {
                        //处理数据加密
                        string baseQuery = string.Empty;
                        int index = url.IndexOf("?", System.StringComparison.Ordinal);
                        if (index != -1)
                        {
                            baseQuery = url.Substring(index + 1);
                            string starturl = url.Substring(0, index + 1);
                            if (!string.IsNullOrEmpty(baseQuery))
                            {
                                baseQuery = Encryption.Encrypt3DES(baseQuery, accessKey);
                                url = starturl + baseQuery;
                            }
                        }
                    }
                    string result1 = await  client.GetStringAsync(url);
                    //处理数据解密
                    if (isEncrypt == 1)
                    {
                        result1 = Encryption.Decrypt3DES(result1, accessKey);
                    }
                    return JsonConvert.DeserializeObject<TResult>(result1);
                }
            }
           
            finally
            {
                if (afterAction != null) afterAction();
            }
        }

        #endregion

        #region 同步方法

        ///// <summary>
        ///// 封装对服务器url的Post请求
        ///// </summary>
        ///// <typeparam name="TResult">返回的结果</typeparam>
        ///// <param name="url">请求的url地址</param>
        ///// <param name="value">请求时传给服务器的参数</param>
        ///// <returns></returns>
        //public static TResult PostAsJson<TResult>(string url, object value)
        //{
        //    url = url.TrimStart('/');
        //    using (var client = ApiClientHelper.GetHttpClient())
        //    {
        //        HttpResponseMessage response = client.PostAsJsonAsync<object>(url, value).Result;
        //        if (response.IsSuccessStatusCode)
        //        {
        //            TResult result = response.Content.ReadAsAsync<TResult>().Result;
        //            return result;
        //        }
        //        //response.EnsureSuccessStatusCode();
        //        ThrowException(response.StatusCode);
        //        throw new Exception("请求时发生错误");
        //    }
        //}

        /// <summary>
        /// 封装对服务器url的Get请求
        /// </summary>
        /// <typeparam name="TResult">返回的结果</typeparam>
        /// <param name="url">请求的url地址</param>
        /// <returns></returns>
        public static TResult GetAsJson<TResult>(string url)
        {
            url = url.TrimStart('/');
            using (var client = ApiClientHelper.GetHttpClient())
            {
                string response = client.GetStringAsync(url).Result;
                return JsonConvert.DeserializeObject<TResult>(response);
            }
        }

        #endregion

        #region 上传下载文件
        public static async Task<IList<VMCustLoanDocInfo>> UploadFile(List<VMCustLoanDocInfo> infos, List<FileStream> fileStreams)
        {
            List<VMCustLoanDocInfo> result = new List<VMCustLoanDocInfo>();
            string url = "File/UploadByte";
            Random random = new Random(int.Parse(DateTime.Now.ToString("HHmmss")));
            int packSize = 30 + random.Next(10);
            int dataMaxLenth = packSize * 1024;
            for (int i = 0; i < infos.Count; i++)
            {
                DateTime nowFrom = DateTime.Now;
                var fileStream = fileStreams[i];
                var info = infos[i];
                string tmpGuid = Utility.Util.GetGuid();

                byte[] bytes = new byte[dataMaxLenth];
                int numBytesToRead = dataMaxLenth;
                int numBytesRead = 0;
                while (numBytesToRead > 0)
                {
                    fileStream.Seek(numBytesRead, SeekOrigin.Begin);
                    // Read may return anything from 0 to numBytesToRead.
                    int n = 0;
                    try
                    {
                        n = fileStream.Read(bytes, 0, numBytesToRead);
                    }
                    catch (Exception ee)
                    {
                        throw ee;
                    }

                    // Break when the end of the file is reached.
                    if (n == 0)
                        break;

                    VMUploadData vmUpload = new VMUploadData() { TempGuid = tmpGuid, Seek = numBytesRead };
                    byte[] data = new byte[n];
                    Array.Copy(bytes, 0, data, 0, n);
                    vmUpload.Data = data;
                    //提交
                    byte isOK = 0;
                    for (int repeatTimes = 1; repeatTimes <= 10; repeatTimes++)
                    {
                        //Console.WriteLine(repeatTimes);
                        try
                        {
                            isOK = await ApiClientHelper.PostAsJsonAsync<byte>(url, vmUpload,null,null,0);
                        }
                        catch
                        { }
                        if (isOK == 1) break;
                    }
                    if (isOK != 1)
                    {
                        throw new Exception("上传" + info.DocName + "失败,请重试");
                    }

                    numBytesRead += n;
                }//while
                string urlFinish = "File/UploadFinish";
                VMUploadFinish vmFinish = new VMUploadFinish() { TempGuid = tmpGuid, VMDocInfo = info };
                vmFinish.TotalUsedTime = DateTime.Now - nowFrom;
                VMCustLoanDocInfo tmpInfo = null;
                try
                {
                    tmpInfo = await ApiClientHelper.PostAsJsonAsync<VMCustLoanDocInfo>(urlFinish, vmFinish,null,null,0);
                }
                catch
                {
                }

                if (null == tmpInfo)
                    tmpInfo = await ApiClientHelper.PostAsJsonAsync<VMCustLoanDocInfo>(urlFinish, vmFinish,null,null,0); //重试

                if (null == tmpInfo)
                {
                    throw new Exception("上传" + info.DocName + "失败,请重试");
                }
                result.Add(tmpInfo);
            }//for
            return result;
        }
        /// <summary>
        /// 上传文件并签章
        /// </summary>
        /// <param name="infos"></param>
        /// <param name="fileStreams"></param>
        /// <returns></returns>
        public static async Task<IList<VMCustLoanDocInfo>> UploadFileSign(List<VMCustLoanDocInfo> infos, List<FileStream> fileStreams)
        {
            List<VMCustLoanDocInfo> result = new List<VMCustLoanDocInfo>();
            string url = "File/UploadByte";
            Random random = new Random(int.Parse(DateTime.Now.ToString("HHmmss")));
            int packSize = 30 + random.Next(10);
            int dataMaxLenth = packSize * 1024;
            for (int i = 0; i < infos.Count; i++)
            {
                DateTime nowFrom = DateTime.Now;
                var fileStream = fileStreams[i];
                var info = infos[i];
                string tmpGuid = Utility.Util.GetGuid();

                byte[] bytes = new byte[dataMaxLenth];
                int numBytesToRead = dataMaxLenth;
                int numBytesRead = 0;
                while (numBytesToRead > 0)
                {
                    fileStream.Seek(numBytesRead, SeekOrigin.Begin);
                    // Read may return anything from 0 to numBytesToRead.
                    int n = 0;
                    try
                    {
                        n = fileStream.Read(bytes, 0, numBytesToRead);
                    }
                    catch (Exception ee)
                    {
                        throw ee;
                    }

                    // Break when the end of the file is reached.
                    if (n == 0)
                        break;

                    VMUploadData vmUpload = new VMUploadData() { TempGuid = tmpGuid, Seek = numBytesRead };
                    byte[] data = new byte[n];
                    Array.Copy(bytes, 0, data, 0, n);
                    vmUpload.Data = data;
                    //提交
                    byte isOK = 0;
                    for (int repeatTimes = 1; repeatTimes <= 10; repeatTimes++)
                    {
                        //Console.WriteLine(repeatTimes);
                        try
                        {
                            isOK = await ApiClientHelper.PostAsJsonAsync<byte>(url, vmUpload,null,null,0);
                        }
                        catch
                        { }
                        if (isOK == 1) break;
                    }
                    if (isOK != 1)
                    {
                        throw new Exception("上传" + info.DocName + "失败,请重试");
                    }

                    numBytesRead += n;
                }//while
                string urlFinish = "File/UploadFinishSign";
                VMUploadFinish vmFinish = new VMUploadFinish() { TempGuid = tmpGuid, VMDocInfo = info };
                vmFinish.TotalUsedTime = DateTime.Now - nowFrom;
                VMCustLoanDocInfo tmpInfo = null;
                try
                {
                    tmpInfo = await ApiClientHelper.PostAsJsonAsync<VMCustLoanDocInfo>(urlFinish, vmFinish,null,null,0);
                }
                catch
                {
                }

                if (null == tmpInfo)
                    tmpInfo = await ApiClientHelper.PostAsJsonAsync<VMCustLoanDocInfo>(urlFinish, vmFinish,null,null,0); //重试

                if (null == tmpInfo)
                {
                    throw new Exception("上传" + info.DocName + "失败,请重试");
                }
                result.Add(tmpInfo);
            }//for
            return result;
        }


        //public static IList<VMCustLoanDocInfo> UploadFile2(List<VMCustLoanDocInfo> infos, List<string> files)
        //{
        //    if (infos.Count != files.Count)
        //    {
        //        throw new Exception("系统内部错误,上传的文件数量与资料数量不一致,请联系管理员");
        //    }
        //    List<VMCustLoanDocInfo> docInfos = new List<VMCustLoanDocInfo>();
        //    string host = WebApiClientConfiguration.MyWebBaseAddress;

        //    for (int i = 0; i < files.Count && i < infos.Count; i++)
        //    {
        //        string fileName = files[i];
        //        VMCustLoanDocInfo vm = infos[i];
        //        using (WebClient client = new WebClient())
        //        {
        //            client.Headers.Add("Cookie", WebApiClientConfiguration.TokenCookieName + "=" + ClientPublicData.LoginToken + ";");
        //            string docName = string.IsNullOrEmpty(vm.DocName) ? fileName : vm.DocName;
        //            Uri uri = new Uri(host + string.Format("File2/Upload?loanGuid={0}&docName={1}&docSource={2}&docType={3}&remark={4}", vm.LoanGuid, docName, vm.DocSource, vm.DocType, vm.Remark));
        //            byte[] resultArr = client.UploadFile(uri, fileName);
        //            if (resultArr != null && resultArr.Length > 0)
        //            {
        //                try
        //                {
        //                    string content = System.Text.UTF8Encoding.UTF8.GetString(resultArr);
        //                    var tmpRep = JsonConvert.DeserializeObject<VMResult<IList<VMCustLoanDocInfo>>>(content);
        //                    if (tmpRep != null)
        //                    {
        //                        if (tmpRep.ErrCode != 0 && i == 0) throw new Exception(tmpRep.ResultMsg);
        //                        if (tmpRep.ErrCode == 0) docInfos.Add(tmpRep.Data.First());
        //                    }
        //                }
        //                catch { }
        //            }
        //        }
        //    }
        //    return docInfos;
        //}
        #endregion
    }
View Code

数据包

/// <summary>
    /// 上传文件数据包
    /// </summary>
    public class VMUploadData
    {
        /// <summary>
        /// 临时Guid
        /// </summary>
        public string TempGuid { get; set; }

        /// <summary>
        /// 数据包
        /// </summary>
        public byte[] Data { get; set; }

        /// <summary>
        /// 数据包开始位置
        /// </summary>
        public int? Seek { get; set; }

        /// <summary>
        /// 验证码,若为未登陆业务上传,需要验证此验证码 VerifyCode = MD5(MD5(TempGuid)+Base64(Data)+"jxJr_FILE")
        /// </summary>
        public string VerifyCode { get; set; }
        /// <summary>
        /// 是否是分块上传 1 是块 0或者null是文件
        /// </summary>
        public string isPart { get; set; }
        /// <summary>
        /// 块名称
        /// </summary>
        public string PartName
        {
            get;
            set;
        }
        public string FileName
        {
            set;
            get;
        }
        public VMUploadFinish FinishInfo
        {
            set;
            get;
        }

    }
View Code

上传

public byte UploadByte(VMUploadData uploadData)
        {
            try
            {
                string userGuid = null;
                if (!string.IsNullOrWhiteSpace(uploadData.VerifyCode) || CurrentLoginInfo == null)
                {
                    userGuid = ConstValue.User_Admin;
                }
                else
                {
                    userGuid = CurrentLoginInfo.EmpInfo == null ? CurrentLoginInfo.UserGuid : CurrentLoginInfo.EmpInfo.Name;
                }

                string tmpGuid = uploadData.TempGuid;

                if (string.IsNullOrEmpty(tmpGuid)) return 0;
                if (uploadData.Data == null || uploadData.Data.Length == 0) return 1;

                if (uploadData.Seek != null)
                {
                    int? tmpSeek = cacheClient.Get<int?>(tmpGuid);
                    if (tmpSeek != null && tmpSeek.Value == uploadData.Seek)
                        return 1;
                }

                string root = HttpContext.Current.Server.MapPath("~/App_Data/tmp");
                System.IO.Directory.CreateDirectory(root);
                string fileName = HttpContext.Current.Server.MapPath("~/App_Data/tmp/" + tmpGuid);
                bool isFileExits = System.IO.File.Exists(fileName);

                if (!isFileExits)
                {
                    Logger.Info(string.Format("用户{0}开始UploadByte:{1}", userGuid, tmpGuid));
                }
                using (var stream = new FileStream(fileName, FileMode.Append))
                {
                    stream.Write(uploadData.Data, 0, uploadData.Data.Length);
                }
                cacheClient.Set(tmpGuid, uploadData.Seek, DateTime.Now.AddMinutes(3));
                return 1;
            }
            catch (System.Exception e)
            {
                Logger.Error(e);
                return 0;
            }
        }
View Code

上传结束

public HttpResponseMessage UploadFinish(VMUploadFinish finishInfo)
        {
            string userGuid = null;
            if (!string.IsNullOrWhiteSpace(finishInfo.VerifyCode))
            {
                userGuid = ConstValue.User_Admin;
            }
            else
            {
                userGuid = CurrentLoginInfo.EmpInfo == null ? CurrentLoginInfo.UserGuid : CurrentLoginInfo.EmpInfo.Name;
            }

            if (string.IsNullOrEmpty(finishInfo.TempGuid) || finishInfo.VMDocInfo == null)
            {
                Logger.Error(string.Format("UploadFinish上传数据参数为空:user:{0}", userGuid));
                return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "上传数据异常,请联系管理员");
            }

            string root = HttpContext.Current.Server.MapPath("~/App_Data/tmp");
            string localFileName = HttpContext.Current.Server.MapPath("~/App_Data/tmp/" + finishInfo.TempGuid);

            try
            {
                //判断临时文件是否存在,不存在则返回错误
                if (!File.Exists(localFileName))
                {
                    Logger.Error(string.Format("UploadFinish上传数据参数不存在:user:{0},localfilename:{1}", userGuid, localFileName));
                    //return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "上传数据异常,请联系管理员");

                    VMCustLoanDocInfo tmpObj0 = new VMCustLoanDocInfo();

                    return new HttpResponseMessage()
                    {
                        Content = new ObjectContent(typeof(VMCustLoanDocInfo), tmpObj0, new JsonMediaTypeFormatter())
                    };
                }

                B_CustLoanDoc bll = new B_CustLoanDoc();
                B_LoanApply bllApply = new B_LoanApply();


                E_CustLoanDoc loanDoc = new E_CustLoanDoc() { LoanGuid = finishInfo.VMDocInfo.LoanGuid, Status = "1" };

                string bankGuid = "";
                string custCode = "";
                string custGuid = "";
                bllApply.GetCustDetail(loanDoc.LoanGuid, ref custGuid, ref bankGuid, ref custCode);
                //如果custguid为空,则拿参数里面的值。panhanjun 2016-09-23
                if (string.IsNullOrWhiteSpace(custGuid))
                {
                    custGuid = finishInfo.VMDocInfo.CustGuid;
                }
                if (string.IsNullOrWhiteSpace(custGuid) && !string.IsNullOrWhiteSpace(finishInfo.VMDocInfo.Remark))
                {
                    var rr = (new B_CustInfo()).GetByIdcard(finishInfo.VMDocInfo.Remark);
                    if (rr != null && rr.Count() > 0)
                    {
                        custGuid = rr.OrderByDescending(c => c.CreateDate).Select(c => c.Guid).FirstOrDefault();
                    }
                }

                bankGuid = bankGuid.Trim();
                custGuid = custGuid.Trim();
                custCode = custCode.Trim();
                if (string.IsNullOrEmpty(bankGuid)) bankGuid = "0";

                loanDoc.CustGuid = custGuid;
                loanDoc.Remark = finishInfo.VMDocInfo.Remark;
                if (!string.IsNullOrWhiteSpace(finishInfo.VMDocInfo.ForeignGuid)) //为附加查询人准备的
                {
                    loanDoc.ForeignGuid = finishInfo.VMDocInfo.ForeignGuid;
                }
                else
                {
                    loanDoc.ForeignGuid = custGuid;
                }

                //if (CurrentLoginInfo != null && CurrentLoginInfo.EmpInfo != null)
                {
                    string logStr = "{0}上传文件{1}";
                    Logger.Info(string.Format(logStr, userGuid, finishInfo.VMDocInfo.DocName));
                }

                string newFilePath = "";
                string newFileName = "";
                if (finishInfo.VMDocInfo.DocType == ConstValue.Value_Res_Contract_System)
                {
                    //未签约合同
                    //保存到App_Data\日期\SystemContract\LoanGuid\filename
                    newFilePath = "~/App_Data/" + DateTime.Now.ToString("yyyyMMdd") + "/SystemContract/" + loanDoc.LoanGuid + "/";
                    newFileName = newFilePath + Util.GetFileName(finishInfo.VMDocInfo.DocName);
                    loanDoc.Status = "0"; //默认不显示
                }
                else
                {
                    //其它文档
                    //保存到App_Data\日期\CustDoc\LoanGuid\new guid().file
                    newFilePath = "~/App_Data/" + DateTime.Now.ToString("yyyyMMdd") + "/CustDoc/" + loanDoc.LoanGuid + "/";
                    newFileName = newFilePath + Util.GetGuid() + Util.GetFileExt(finishInfo.VMDocInfo.DocName);
                    loanDoc.Status = "1";
                }

                //System.IO.Directory.CreateDirectory(HttpContext.Current.Server.MapPath(newFilePath));
                CreateDirectory(newFilePath);

                E_DocInfo doc = new E_DocInfo();
                doc.DocPath = newFileName;

                //string path2 = HttpContext.Current.Server.MapPath(doc.DocPath);
                string path2 = MapPath(doc.DocPath);

                if (File.Exists(path2)) File.Delete(path2);
                File.Move(localFileName, path2);

                doc.ServerRootPath = ConfigHelper.GetValue("ShareFileUrl");
                doc.DocName = Util.GetFileName(finishInfo.VMDocInfo.DocName);
                doc.DocSource = finishInfo.VMDocInfo.DocSource;
                doc.DocType = finishInfo.VMDocInfo.DocType;
                long fileLength;
                doc.DocHash = Util.GetFileHashMD5AndLength(path2, out fileLength);

                #region 把用时写入到专门的日记文件
                string strUsedTime = "{0}\t{1}\t{2}\t{3}\t{4}\t{5}";
                string usedTimeFileName = HttpContext.Current.Server.MapPath("~/App_Data/UploadFileUsedTime.txt");
                fileLength = (long)(fileLength / 1024);
                using (StreamWriter sr = File.AppendText(usedTimeFileName))
                {
                    if (string.IsNullOrWhiteSpace(finishInfo.VerifyCode))
                    {
                        sr.WriteLine(strUsedTime, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), CurrentLoginInfo.UserOrgName, CurrentLoginInfo.UserName, fileLength, finishInfo.TotalUsedTime.TotalSeconds.ToString("f0"), finishInfo.VMDocInfo.DocName);
                    }
                    else
                    {
                        sr.WriteLine(strUsedTime, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), "", userGuid, fileLength, finishInfo.TotalUsedTime.TotalSeconds.ToString("f0"), finishInfo.VMDocInfo.DocName);
                    }

                }
                //File.AppendAllText(usedTimeFileName, string.Format(strUsedTime, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), CurrentLoginInfo.UserOrgName, CurrentLoginInfo.UserName, fileLength, finishInfo.TotalUsedTime.TotalSeconds.ToString("f0"), finishInfo.VMDocInfo.DocName));
                #endregion
                var addResult = bll.Add(loanDoc, doc, finishInfo.VMDocInfo.DocGuid, finishInfo.VMDocInfo.CustLoanDocGuid);
                if (addResult.ErrCode != 0)
                {
                    return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, addResult.ResultMsg);
                }
                E_CustLoanDoc cldoc = addResult.Data;
                loanDoc.DocGuid = cldoc.DocGuid;
                var tmpObj11 = new VMCustLoanDocInfo
                {
                    ForeignGuid = loanDoc.ForeignGuid,
                    CreateDate = DateTime.Now,
                    CustGuid = custGuid,
                    DocGuid = loanDoc.DocGuid,
                    DocHash = doc.DocHash,
                    DocName = finishInfo.VMDocInfo.DocName,
                    DocSource = finishInfo.VMDocInfo.DocSource,
                    DocType = finishInfo.VMDocInfo.DocType,
                    IsDownLoadFromServer = false,
                    LoanGuid = finishInfo.VMDocInfo.LoanGuid,
                    Status = loanDoc.Status,
                    Remark = "",
                    TmpFileName = "",
                    CustLoanDocGuid = loanDoc.CustLoanDocGuid
                };
                return new HttpResponseMessage()
                {
                    Content = new ObjectContent(typeof(VMCustLoanDocInfo), tmpObj11, new JsonMediaTypeFormatter())
                };
            }
            catch (System.Exception e)
            {
                Logger.Error(e);
                return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e.Message);
            }
        }
View Code

下载

public HttpResponseMessage Download(string docGuid)
        {
            MediaTypeHeaderValue _mediaType = MediaTypeHeaderValue.Parse("application/octet-stream");
            try
            {
                E_DocInfo docInfo = new B_DocInfo().GetObject(docGuid);
                if (null == docInfo)
                {
                    throw new HttpResponseException(HttpStatusCode.NotFound);
                }
                string fileName = HttpContext.Current.Server.MapPath(docInfo.DocPath);

                if (!File.Exists(fileName))
                {
                    fileName = MapPath(docInfo.DocPath,docInfo.ServerRootPath);
                    if (!File.Exists(fileName))
                        throw new HttpResponseException(HttpStatusCode.NotFound);
                }
                //FileInfo fileInfo = new FileInfo(fileName);

                FileStream fileStream = new FileStream(fileName, FileMode.Open);
                HttpResponseMessage fullResponse = Request.CreateResponse(HttpStatusCode.OK);
                fullResponse.Content = new StreamContent(fileStream);

                fullResponse.Content.Headers.ContentType = _mediaType;
                //fullResponse.Content.Headers.ContentDisposition
                //    = new ContentDispositionHeaderValue("fileName") { FileName = fileInfo.Name };
                return fullResponse;

            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new HttpResponseException(HttpStatusCode.NotFound);
            }
        }
View Code

 

posted @ 2018-07-16 17:01  bxzjzg  阅读(318)  评论(0)    收藏  举报