using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Web; namespace VRS.Handler { /// /// Files 的摘要说明 /// public class Files : BaseHandler, IHttpHandler { DataService.BLL.pro_file bll_file = new DataService.BLL.pro_file(); DataService.BLL.pro_result bll_pro_result = new DataService.BLL.pro_result(); public void ProcessRequest(HttpContext context) { //context.Response.ContentType = "text/plain"; baseContext = context; context.Response.ContentType = "application/json"; CrossDomain(); if (null == context.Request["action"]) { var result = GetResult(false, "缺少参数:action"); context.Response.Write(result); context.Response.End(); } string action = context.Request["action"]; switch (action) { #region 练习考试 case "addlianxi": Add_Lianxi(context); break; case "dellianxi": Delete_Lianxi(context); break; case "querylianxi": Query_Lianxi(context); break; #endregion //添加文件 参数 result_id:考核结果id ,file :文件 case "Add": Add(context); break; //添加cos文件 case "addcos": AddCos(context); break; case "Update": Update(context); break; //删除进度文件记录,同时删除文件 参数 file_id:文件id case "Delete": Delete(context); break; // 按照文件 file_id 查询文件 case "queryByFileid": QueryFiles(context); break; //按照进度ProgressId查询文件列表按日期分组 参数 ProgressId:进度id // case "queryByProgressId": //queryByProgressId(context); // break; //按照考核结果 ResultId查询文件 case "queryByResultId": queryByResultId(context); break; default: var result = GetResult(false, "方法名不存在:" + action); context.Response.Write(result); break; } } /// /// 按照进度ProgressId查询所有文件列表按日期分组 /// /// public void queryByResultId(HttpContext context) { var result_id = context.Request.Params["result_id"]; var sb = new StringBuilder(); sb.Append(" 1=1 "); if (!string.IsNullOrWhiteSpace(result_id)) { sb.Append(" and out_id='" + result_id + "' and r1='2' "); } var file = bll_file.GetModelList(sb.ToString()).FirstOrDefault(); var data = GetResult(file); context.Response.Write(data); context.Response.End(); } /// /// 按照进度ProgressId查询所有文件列表按日期分组 /// /// public void queryByProgressId(HttpContext context) { var condtion = context.Request.Params["ProgressId"]; var sb = new StringBuilder(); sb.Append(" 1=1 "); if (!string.IsNullOrWhiteSpace(condtion)) { sb.Append(" and progress_id='" + condtion + "' and r1='2' "); } var listAll = bll_file.GetModelList(sb.ToString()); var result = new List(); for (int i = 0; i < listAll.Count; i++) { var item = listAll[i]; var dateStr = item.create_time.Value.ToString("yyyy年MM月dd日"); var existsProgressFile = result.FirstOrDefault(s => s.DateDesc == dateStr); if (null == existsProgressFile) { var progressFile = new ProgressFileData(); progressFile.DateDesc = dateStr; progressFile.data = new List(); progressFile.data.Add(item); result.Add(progressFile); } else { existsProgressFile.data.Add(item); } } var list_result = result.OrderByDescending(s => s.DateDesc).ToList(); var data = GetResult(list_result); context.Response.Write(data); context.Response.End(); } ///查询文件 public void QueryFiles(HttpContext context) { var data = context.Request.Params["file_id"]; var ret = string.Empty; if (string.IsNullOrEmpty(data)) { ret = GetResult(false, "file_id参数不能为空"); context.Response.Write(ret); context.Response.End(); } try { var model = bll_file.GetModel(data); if (null == model) { ret = GetResult(false, "文件记录不存在,file_id:" + data); context.Response.Write(ret); } else { var result = GetResult(model); context.Response.Write(result); } } catch (Exception ex) { var result = GetResult(false, "查询失败,异常:" + ex.Message); context.Response.Write(result); } } /// /// 添加Cos文件 参数 result_id:结果id ,cos_url : cos文件 /// /// public void AddCos(HttpContext context) { var ret = string.Empty; var cos_url = context.Request.Params["cos_url"]; if (string.IsNullOrEmpty(cos_url)) { ret = GetResult(false, "cos_url参数不能为空"); context.Response.Write(ret); context.Response.End(); } var result_id = context.Request.Params["result_id"]; if (string.IsNullOrEmpty(result_id)) { ret = GetResult(false, "result_id参数不能为空"); context.Response.Write(ret); context.Response.End(); } if (null == bll_pro_result.GetModel(result_id)) { ret = GetResult(false, "考核记录不存在! result_id:" + result_id); context.Response.Write(ret); context.Response.End(); } if (null != bll_file.GetModelList(string.Format(" out_id ='{0}' and r1='2' ", result_id)).FirstOrDefault()) { ret = GetResult(false, "考核文件已上传! result_id:" + result_id); context.Response.Write(ret); context.Response.End(); } try { var model = new DataService.Model.pro_file(); var newid = BasePage.GetLongId(); var file_key = "File" + newid; model.file_id = file_key; model.create_time = DateTime.Now; model.out_id = result_id; // file_type 文件类型 /* model.file_size = file.ContentLength; //文件大小 model.file_desc = file_name; //文件描述 model.file_ext = extension; //文件后缀 model.file_type = extension.Replace(".", ""); //文件类型 */ var file_size = context.Request.Params["file_size"]; var file_desc = context.Request.Params["file_desc"]; var file_ext = context.Request.Params["file_ext"]; var file_type = context.Request.Params["file_type"]; int isize = 0; if (int.TryParse(file_size, out isize)) { model.file_size = isize; } model.file_desc = file_desc; model.file_ext = file_ext; model.file_type = file_type; model.file_url = cos_url; //文件路径-相对路径 model.r1 = "2";//上传完成 var flag = bll_file.Add(model); if (flag) { var result = GetResult(true, model, "上传成功!"); context.Response.Write(result); } else { var result = GetResult(false, model, "添加失败"); context.Response.Write(result); } } catch (Exception ex) { var result = GetResult(false, "添加失败,异常:" + ex.Message); context.Response.Write(result); } } #region 练习题添加图片文件 /// /// 添加文件 参数 ProgressId:进度id ,file :文件 /// /// public void Add_Lianxi(HttpContext context) { var ret = string.Empty; if (context.Request.Files.Count <= 0) { ret = GetResult(false, "文件不能为空"); context.Response.Write(ret); context.Response.End(); } var result_id = context.Request.Params["result_id"]; if (string.IsNullOrEmpty(result_id)) { ret = GetResult(false, "result_id参数不能为空"); context.Response.Write(ret); context.Response.End(); } var theory_base_id = context.Request.Params["theory_base_id"]; if (string.IsNullOrEmpty(theory_base_id)) { ret = GetResult(false, "theory_base_id参数不能为空"); context.Response.Write(ret); context.Response.End(); } /* var no = context.Request.Params["no"]; if (string.IsNullOrEmpty(no)) { ret = GetResult(false, "no参数不能为空"); context.Response.Write(ret); context.Response.End(); } if (null != bll_file.GetModelList(string.Format(" theory_base_id ='{0}' and no={1} and out_id='{2}' ", theory_base_id, no, result_id)).FirstOrDefault()) { ret = GetResult(false, "文件已上传!"); context.Response.Write(ret); context.Response.End(); } */ try { var model = new DataService.Model.pro_file(); //var newid = Path.GetRandomFileName().Replace(".", ""); var newid = BasePage.GetId(); var file_key = "File_" + newid; model.file_id = file_key; model.create_time = DateTime.Now; model.out_id = result_id; model.theory_base_id = theory_base_id; //model.no = int.Parse(no); var file = context.Request.Files[0]; var extension = Path.GetExtension(file.FileName); var file_name = file.FileName; string uploadPath = "Upload/"; string NewfileName = newid + extension; // file_type 文件类型 model.file_size = file.ContentLength; //文件大小 model.file_desc = file_name; //文件描述 model.file_ext = extension; //文件后缀 model.file_type = extension.Replace(".", ""); //文件类型 model.file_url = "~/" + uploadPath + NewfileName; //文件路径-相对路径 model.r1 = "1";//上传中 var flag = bll_file.Add(model); if (flag) { var directory = context.Server.MapPath("~/" + uploadPath); if (!Directory.Exists(directory)) Directory.CreateDirectory(directory); string serverPath = directory + NewfileName; file.SaveAs(serverPath); /* var thumbnail_url = ""; if (ImageClass.IsRealImage(serverPath)) { var thumb_fileName = prefix + "_" + newid + "_r" + extension; var newPath = uploadPath + thumb_fileName; var reducePath = directory + thumb_fileName; ImageClass img = new ImageClass(serverPath); img.GetReducedImage(300, 300, reducePath); thumbnail_url = uploadPath + thumb_fileName; //缩略图路径(图片) } */ var item = bll_file.GetModel(file_key); if (null != item) { item.r1 = "2";//上传完成 //item.thumbnail_url = thumbnail_url; bll_file.Update(item); } var Authority = context.Request.Url.Authority; var new_url = "http://" + Authority + model.file_url.Replace("~", ""); item.http_url = new_url; var result = GetResult(true, item, "上传成功!"); context.Response.Write(result); } else { var result = GetResult(false, model, "添加失败"); context.Response.Write(result); } } catch (Exception ex) { var result = GetResult(false, "添加失败,异常:" + ex.Message); context.Response.Write(result); } } /// /// 删除练习 /// /// public void Delete_Lianxi(HttpContext context) { var ret = string.Empty; var file_id = context.Request.Params["file_id"]; if (string.IsNullOrEmpty(file_id)) { ret = GetResult(false, "file_id参数不能为空"); context.Response.Write(ret); context.Response.End(); } var model = bll_file.GetModel(file_id); if (null == model) { ret = GetResult(false, "文件记录不存在 file_id:"+ file_id); context.Response.Write(ret); context.Response.End(); } var url = model.file_url; if (bll_file.Delete(model.file_id)) { string oldParh = context.Server.MapPath(url); if (File.Exists(oldParh)) { File.Delete(oldParh); } ret = GetResult(true); context.Response.Write(ret); context.Response.End(); } else { ret = GetResult(false, "删除失败 file_id:" + file_id); context.Response.Write(ret); context.Response.End(); } //file_id /* var result_id = context.Request.Params["result_id"]; if (string.IsNullOrEmpty(result_id)) { ret = GetResult(false, "result_id参数不能为空"); context.Response.Write(ret); context.Response.End(); } var theory_base_id = context.Request.Params["theory_base_id"]; if (string.IsNullOrEmpty(theory_base_id)) { ret = GetResult(false, "theory_base_id参数不能为空"); context.Response.Write(ret); context.Response.End(); } var no = context.Request.Params["no"]; if (string.IsNullOrEmpty(no)) { ret = GetResult(false, "no参数不能为空"); context.Response.Write(ret); context.Response.End(); } var model = bll_file.GetModelList(string.Format(" theory_base_id ='{0}' and no={1} and out_id='{2}' ", theory_base_id, no, result_id)).FirstOrDefault(); if (null == model) { ret = GetResult(false, "文件记录不存在"); context.Response.Write(ret); context.Response.End(); } */ } /// /// 查询练习 /// /// public void Query_Lianxi(HttpContext context) { var ret = string.Empty; var result_id = context.Request.Params["result_id"]; if (string.IsNullOrEmpty(result_id)) { ret = GetResult(false, "result_id参数不能为空"); context.Response.Write(ret); context.Response.End(); } var theory_base_id = context.Request.Params["theory_base_id"]; if (string.IsNullOrEmpty(theory_base_id)) { ret = GetResult(false, "theory_base_id参数不能为空"); context.Response.Write(ret); context.Response.End(); } var query = string.Format(" theory_base_id ='{0}' and out_id='{1}' ", theory_base_id, result_id); /* var no = context.Request.Params["no"]; if (!string.IsNullOrEmpty(no)) { query = query + " and no=" + no + " "; } */ var list = bll_file.GetModelList(query).OrderBy(s => s.create_time).ToList(); List list_back = new List(); foreach (var item in list) { if (!string.IsNullOrEmpty(item.file_url)) { try { var dir_file = context.Server.MapPath(item.file_url); if (!File.Exists(dir_file)) { continue; } } catch(Exception ex) { continue; } var Authority = context.Request.Url.Authority; var new_url = "http://" + Authority + item.file_url.Replace("~", ""); item.http_url = new_url; list_back.Add(item); } } ret = GetResult(true, list_back); context.Response.Write(ret); context.Response.End(); } #endregion /// /// 添加文件 参数 ProgressId:进度id ,file :文件 /// /// public void Add(HttpContext context) { var ret = string.Empty; if (context.Request.Files.Count <= 0) { ret = GetResult(false, "文件不能为空"); context.Response.Write(ret); context.Response.End(); } //xmnyazzzwhr //var temp = BasePage.GetMD5("xmnyazzzwhr"); var result_id = context.Request.Params["result_id"]; if (string.IsNullOrEmpty(result_id)) { ret = GetResult(false, "result_id参数不能为空"); context.Response.Write(ret); context.Response.End(); } if (null == bll_pro_result.GetModel(result_id)) { ret = GetResult(false, "考核记录不存在! result_id:" + result_id); context.Response.Write(ret); context.Response.End(); } if (null != bll_file.GetModelList(string.Format(" out_id ='{0}' and r1='2' ", result_id)).FirstOrDefault()) { ret = GetResult(false, "考核文件已上传! result_id:" + result_id); context.Response.Write(ret); context.Response.End(); } try { var model = new DataService.Model.pro_file(); var newid = Path.GetRandomFileName().Replace(".", ""); var file_key = "File_" + newid; model.file_id = file_key; model.create_time = DateTime.Now; model.out_id = result_id; var file = context.Request.Files[0]; var extension = Path.GetExtension(file.FileName); var file_name = file.FileName; string uploadPath = "Upload/"; string NewfileName = newid + extension; // file_type 文件类型 model.file_size = file.ContentLength; //文件大小 model.file_desc = file_name; //文件描述 model.file_ext = extension; //文件后缀 model.file_type = extension.Replace(".", ""); //文件类型 model.file_url = uploadPath + NewfileName; //文件路径-相对路径 model.r1 = "1";//上传中 var flag = bll_file.Add(model); if (flag) { var directory = context.Server.MapPath("~/" + uploadPath); if (!Directory.Exists(directory)) Directory.CreateDirectory(directory); string serverPath = directory + NewfileName; file.SaveAs(serverPath); /* var thumbnail_url = ""; if (ImageClass.IsRealImage(serverPath)) { var thumb_fileName = prefix + "_" + newid + "_r" + extension; var newPath = uploadPath + thumb_fileName; var reducePath = directory + thumb_fileName; ImageClass img = new ImageClass(serverPath); img.GetReducedImage(300, 300, reducePath); thumbnail_url = uploadPath + thumb_fileName; //缩略图路径(图片) } */ var item = bll_file.GetModel(file_key); if (null != item) { item.r1 = "2";//上传完成 //item.thumbnail_url = thumbnail_url; bll_file.Update(item); } var result = GetResult(true, item, "上传成功!"); context.Response.Write(result); } else { var result = GetResult(false, model, "添加失败"); context.Response.Write(result); } } catch (Exception ex) { var result = GetResult(false, "添加失败,异常:" + ex.Message); context.Response.Write(result); } } //修改文件 public void Update(HttpContext context) { var data = context.Request.Params["data"]; var ret = string.Empty; if (string.IsNullOrEmpty(data)) { ret = GetResult(false, "data参数不能为空"); context.Response.Write(ret); context.Response.End(); } try { var model = JsonConvert.DeserializeObject(data); var flag = bll_file.Update(model); if (flag) { var result = GetResult(true, model); context.Response.Write(result); } else { var result = GetResult(false, model, "修改失败"); context.Response.Write(result); } } catch (Exception ex) { var result = GetResult(false, "修改失败,异常:" + ex.Message); context.Response.Write(result); } } /// /// 删除缓存的文件 /// /// public void DeleteCacheFiles(HttpContext context) { var list = bll_file.GetModelList(" r1 ='1'").ToList(); foreach (var item in list) { var flag = bll_file.Delete(item.file_id); if (flag) { try { if (!string.IsNullOrEmpty(item.file_url)) { string path = context.Server.MapPath("~/" + item.file_url); if (File.Exists(path)) { File.Delete(path); } } if (!string.IsNullOrEmpty(item.thumbnail_url)) { string path = context.Server.MapPath("~/" + item.thumbnail_url); if (File.Exists(path)) { File.Delete(path); } } } catch (Exception fileException) { write_log("删除文件异常:file_url:" + item.file_url + ",thumbnail_url:" + item.thumbnail_url + ",异常:" + fileException.ToString()); } } } } //删除进度文件记录,同时删除文件 参数 file_id:文件id public void Delete(HttpContext context) { var data = context.Request.Params["file_id"]; var ret = string.Empty; if (string.IsNullOrEmpty(data)) { ret = GetResult(false, "file_id参数不能为空"); context.Response.Write(ret); context.Response.End(); } var model = bll_file.GetModel(data); if (null == model) { ret = GetResult(false, "文件记录不存在,file_id:" + data); context.Response.Write(ret); context.Response.End(); } try { var flag = bll_file.Delete(data); if (flag) { try { if (!string.IsNullOrEmpty(model.file_url)) { string path = context.Server.MapPath("~/" + model.file_url); if (File.Exists(path)) { File.Delete(path); } } if (!string.IsNullOrEmpty(model.thumbnail_url)) { string path = context.Server.MapPath("~/" + model.thumbnail_url); if (File.Exists(path)) { File.Delete(path); } } } catch (Exception fileException) { write_log("删除文件异常:file_url:" + model.file_url + ",thumbnail_url:" + model.thumbnail_url + ",异常:" + fileException.ToString()); } DeleteCacheFiles(context); var result = GetResult(true); context.Response.Write(result); } else { var result = GetResult(false, "删除失败"); context.Response.Write(result); } } catch (Exception ex) { var result = GetResult(false, "删除失败,异常:" + ex.Message); context.Response.Write(result); } } public bool IsReusable { get { return false; } } /// /// 查询某进度文件列表接口返回数据 /// public class ProgressFileData { /// /// 项目类型 /// public string DateDesc { get; set; } /// /// 项目类型 /// public List data { get; set; } } } }