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 }
数据包
 
/// <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; } }
上传
 
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; } }
上传结束
 
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); } }
下载
 
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); } }
 
                    
                
 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号