1036 lines
		
	
	
		
			45 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			1036 lines
		
	
	
		
			45 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| 
								 | 
							
								using APT.BaseData.Domain.Entities;
							 | 
						|||
| 
								 | 
							
								using APT.Infrastructure.Core;
							 | 
						|||
| 
								 | 
							
								using APT.Utility;
							 | 
						|||
| 
								 | 
							
								using Microsoft.AspNetCore.Mvc;
							 | 
						|||
| 
								 | 
							
								using System;
							 | 
						|||
| 
								 | 
							
								using System.Collections.Generic;
							 | 
						|||
| 
								 | 
							
								using System.IO;
							 | 
						|||
| 
								 | 
							
								using System.Linq;
							 | 
						|||
| 
								 | 
							
								using Microsoft.AspNetCore.Http.Features;
							 | 
						|||
| 
								 | 
							
								using APT.Infrastructure.Api;
							 | 
						|||
| 
								 | 
							
								using System.Dynamic;
							 | 
						|||
| 
								 | 
							
								using APT.BaseData.Domain.Entities.OP;
							 | 
						|||
| 
								 | 
							
								using APT.BaseData.Domain.ApiModel.OP;
							 | 
						|||
| 
								 | 
							
								using APT.BaseData.Domain.Entities.FM;
							 | 
						|||
| 
								 | 
							
								using APT.BaseData.Domain.Enums.PF;
							 | 
						|||
| 
								 | 
							
								using System.ComponentModel;
							 | 
						|||
| 
								 | 
							
								using System.Net.Http;
							 | 
						|||
| 
								 | 
							
								using System.Net;
							 | 
						|||
| 
								 | 
							
								using System.Net.Http.Headers;
							 | 
						|||
| 
								 | 
							
								using Microsoft.AspNetCore.Http;
							 | 
						|||
| 
								 | 
							
								using System.Text;
							 | 
						|||
| 
								 | 
							
								using System.Web;
							 | 
						|||
| 
								 | 
							
								using Ubiety.Dns.Core;
							 | 
						|||
| 
								 | 
							
								using System.Drawing;
							 | 
						|||
| 
								 | 
							
								using System.Drawing.Imaging;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								namespace APT.PF.WebApiControllers.Api.PF
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								    /// <summary>
							 | 
						|||
| 
								 | 
							
								    /// 文件
							 | 
						|||
| 
								 | 
							
								    /// </summary>
							 | 
						|||
| 
								 | 
							
								    [Route("api/PF/File")]
							 | 
						|||
| 
								 | 
							
								    public class FileController : APTApiController<T_PF_FILE>
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 查询
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="filter"></param>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        [HttpPost, Route("Entities")]
							 | 
						|||
| 
								 | 
							
								        public JsonActionResult<IEnumerable<T_PF_FILE>> Entities([FromBody] KeywordFilter filter)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            return WitEntities(null, filter);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 查询
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="filter"></param>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        /// 
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        [HttpPost, Route("OrderEntities")]
							 | 
						|||
| 
								 | 
							
								        public JsonActionResult<IEnumerable<T_PF_FILE>> OrderEntities([FromBody] KeywordFilter filter)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            return WitOrderEntities(null, filter);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 查询
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="pageFilter"></param>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        [HttpPost, Route("Paged")]
							 | 
						|||
| 
								 | 
							
								        public PagedActionResult<T_PF_FILE> Paged([FromBody] KeywordPageFilter pageFilter)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            return WitPaged(null, pageFilter);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 查询
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="pageFilter"></param>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        [HttpPost, Route("OrderPaged")]
							 | 
						|||
| 
								 | 
							
								        public PagedActionResult<T_PF_FILE> OrderPaged([FromBody] KeywordPageFilter pageFilter)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            return WitOrderPaged(null, pageFilter);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 删除
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="id"></param>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        [HttpGet, Route("Delete")]
							 | 
						|||
| 
								 | 
							
								        public JsonActionResult<bool> Delete(string id)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            return WitDelete(id);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 更新
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="id"></param>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        [HttpPost, Route("Update")]
							 | 
						|||
| 
								 | 
							
								        public JsonActionResult<bool> Update([FromBody] T_PF_FILE entity)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            return WitUpdate(entity);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 批量删除
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="ids"></param>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        [HttpGet, Route("BatchDelete")]
							 | 
						|||
| 
								 | 
							
								        public JsonActionResult<bool> BatchDelete(string ids)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            return WitBatchDelete(ids);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 获得单条实体数据
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="filter"></param>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        [HttpPost, Route("Get")]
							 | 
						|||
| 
								 | 
							
								        public JsonActionResult<T_PF_FILE> Get([FromBody] KeywordFilter filter)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            return WitEntity(null, filter);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 上次文件
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="filter"></param>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        //[HttpPost, Route("UploadFile")]
							 | 
						|||
| 
								 | 
							
								        //public JsonActionResult<string> UploadFile()
							 | 
						|||
| 
								 | 
							
								        //{
							 | 
						|||
| 
								 | 
							
								        //    return SafeExecute<string>(() =>
							 | 
						|||
| 
								 | 
							
								        //    {
							 | 
						|||
| 
								 | 
							
								        //        string result = string.Empty;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        //        var httpRequest = HttpContext.Request;
							 | 
						|||
| 
								 | 
							
								        //        var orgId = httpRequest.Form["OrgId"];  // 获取 组织
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        //        List<T_PF_FILE> fileList = new List<T_PF_FILE>();
							 | 
						|||
| 
								 | 
							
								        //        foreach (var key in httpRequest.Form.Files)  // 文件键
							 | 
						|||
| 
								 | 
							
								        //        {
							 | 
						|||
| 
								 | 
							
								        //            var postedFile = key;    // 获取文件键对应的文件对象
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        //            T_PF_FILE file = new T_PF_FILE();
							 | 
						|||
| 
								 | 
							
								        //            file.ORG_ID = new Guid(orgId);
							 | 
						|||
| 
								 | 
							
								        //            file.FILE_NAME = postedFile.FileName;
							 | 
						|||
| 
								 | 
							
								        //            file.FILE_TYPE = postedFile.ContentType;
							 | 
						|||
| 
								 | 
							
								        //            Byte[] fileData = new Byte[postedFile.Length];
							 | 
						|||
| 
								 | 
							
								        //            Stream sr = postedFile.OpenReadStream();//创建数据流对象 
							 | 
						|||
| 
								 | 
							
								        //            sr.Read(fileData, 0, (int)postedFile.Length);
							 | 
						|||
| 
								 | 
							
								        //            file.FILE_DATA = fileData;
							 | 
						|||
| 
								 | 
							
								        //            fileList.Add(file);
							 | 
						|||
| 
								 | 
							
								        //            result = file.ID.ToString();
							 | 
						|||
| 
								 | 
							
								        //        }
							 | 
						|||
| 
								 | 
							
								        //        this.BantchAddEntity(fileList);
							 | 
						|||
| 
								 | 
							
								        //        return result;
							 | 
						|||
| 
								 | 
							
								        //    });
							 | 
						|||
| 
								 | 
							
								        //}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        [HttpGet, Route("GetFileFromWebApi")]
							 | 
						|||
| 
								 | 
							
								        public ActionResult GetFileFromWebApi(string strServerPath, string strfileName)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            var httpRequest = HttpContext.Request;
							 | 
						|||
| 
								 | 
							
								            var strOrgId = httpRequest.Form["OrgId"][0];
							 | 
						|||
| 
								 | 
							
								            var orgId = new Guid(strOrgId);
							 | 
						|||
| 
								 | 
							
								            string filePath = GetFilePath(orgId);
							 | 
						|||
| 
								 | 
							
								            var fullFilePath = $"{ConfigurationManager.AppSettings["Img_Local"]}{filePath}";
							 | 
						|||
| 
								 | 
							
								            var host = ConfigurationManager.AppSettings["SapInvokeHost"];
							 | 
						|||
| 
								 | 
							
								            var url = host + fullFilePath + strServerPath;
							 | 
						|||
| 
								 | 
							
								            if (System.IO.File.Exists(url))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                return File(new FileStream(url, FileMode.Open), "application/octet-stream", strfileName);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            else
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                return Content("需要下载的文件已不存在!");
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 上次文件转为图片
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="filter"></param>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        [HttpPost, Route("UploadFileToImage")]
							 | 
						|||
| 
								 | 
							
								        public JsonActionResult<dynamic> UploadFileToImage()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            return SafeExecute<dynamic>(() =>
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                dynamic result = new ExpandoObject();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                var httpRequest = HttpContext.Request;
							 | 
						|||
| 
								 | 
							
								                var strOrgId = httpRequest.Form["OrgId"][0];  // 获取 组织
							 | 
						|||
| 
								 | 
							
								                //T_FM_USER UserChange = null;
							 | 
						|||
| 
								 | 
							
								                //if (httpRequest.Form.ContainsKey("USER_ID"))
							 | 
						|||
| 
								 | 
							
								                //{
							 | 
						|||
| 
								 | 
							
								                //    try
							 | 
						|||
| 
								 | 
							
								                //    {
							 | 
						|||
| 
								 | 
							
								                //        UserChange = GetEntity<T_FM_USER>(new Guid(httpRequest.Form["USER_ID"][0]));
							 | 
						|||
| 
								 | 
							
								                //    }
							 | 
						|||
| 
								 | 
							
								                //    catch
							 | 
						|||
| 
								 | 
							
								                //    {
							 | 
						|||
| 
								 | 
							
								                //        UserChange = null;
							 | 
						|||
| 
								 | 
							
								                //    }
							 | 
						|||
| 
								 | 
							
								                //}
							 | 
						|||
| 
								 | 
							
								                var isSaveSelfStr = httpRequest.Form["IsSaveSelf"].Any() ? httpRequest.Form["IsSaveSelf"][0] : "false";  // 是否存储本身
							 | 
						|||
| 
								 | 
							
								                if (string.IsNullOrEmpty(strOrgId))
							 | 
						|||
| 
								 | 
							
								                    throw new Exception("组织不允许为空");
							 | 
						|||
| 
								 | 
							
								                var orgId = new Guid(strOrgId);
							 | 
						|||
| 
								 | 
							
								                //返回的文件地址
							 | 
						|||
| 
								 | 
							
								                List<string> filenames = new List<string>();
							 | 
						|||
| 
								 | 
							
								                var now = DateTime.Now;
							 | 
						|||
| 
								 | 
							
								                //文件存储路径
							 | 
						|||
| 
								 | 
							
								                //var filePath = string.Format("/{0}/{1}/{2}/", now.ToString("yyyy"), now.ToString("yyyyMM"), now.ToString("yyyyMMdd"));
							 | 
						|||
| 
								 | 
							
								                string filePath = GetFilePath(orgId);
							 | 
						|||
| 
								 | 
							
								                var fullFilePath = $"{ ConfigurationManager.AppSettings["Img_Local"]}{filePath}";
							 | 
						|||
| 
								 | 
							
								                //GetFilePath(fullFilePath);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                ImageConverterFactory imageConverterFactory = new ImageConverterFactory();
							 | 
						|||
| 
								 | 
							
								                var host = ConfigurationManager.AppSettings["SapInvokeHost"];
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                List<T_PF_FILE> fileList = new List<T_PF_FILE>();
							 | 
						|||
| 
								 | 
							
								                List<T_PF_IMG_FILE> imgFileList = new List<T_PF_IMG_FILE>();
							 | 
						|||
| 
								 | 
							
								                List<T_PF_IMG_FILE_DETAIL> imgFileDetailList = new List<T_PF_IMG_FILE_DETAIL>();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                var files = httpRequest.Form.Files;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                if (!Directory.Exists(fullFilePath))
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    Directory.CreateDirectory(fullFilePath);
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                foreach (var item in files)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    if (item != null)
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        //文件后缀
							 | 
						|||
| 
								 | 
							
								                        var fileExtension = Path.GetExtension(item.FileName);
							 | 
						|||
| 
								 | 
							
								                        var strDateTime = DateTime.Now.ToString("yyMMddhhmmssfff"); //取得时间字符串
							 | 
						|||
| 
								 | 
							
								                        var strRan = Convert.ToString(new Random().Next(100, 999)); //生成三位随机数
							 | 
						|||
| 
								 | 
							
								                        var saveName = strDateTime + strRan + fileExtension;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                        //插入图片数据
							 | 
						|||
| 
								 | 
							
								                        using (FileStream fs = System.IO.File.Create(fullFilePath + saveName))
							 | 
						|||
| 
								 | 
							
								                        {
							 | 
						|||
| 
								 | 
							
								                            item.CopyTo(fs);
							 | 
						|||
| 
								 | 
							
								                            fs.Flush();
							 | 
						|||
| 
								 | 
							
								                        }
							 | 
						|||
| 
								 | 
							
								                        filenames.Add(filePath + saveName);
							 | 
						|||
| 
								 | 
							
								                        string fileName = item.FileName;
							 | 
						|||
| 
								 | 
							
								                        var pos = fileName.LastIndexOf(".");
							 | 
						|||
| 
								 | 
							
								                        var extendName = fileName.Substring(pos);
							 | 
						|||
| 
								 | 
							
								                        List<ConvertImageFile> list = new List<ConvertImageFile>();
							 | 
						|||
| 
								 | 
							
								                        bool isSuppot = imageConverterFactory.Support(extendName);
							 | 
						|||
| 
								 | 
							
								                        bool isSaveSelf = true;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                        T_PF_IMG_FILE imgFile = new T_PF_IMG_FILE
							 | 
						|||
| 
								 | 
							
								                        {
							 | 
						|||
| 
								 | 
							
								                            FILE_NAME = fileName,
							 | 
						|||
| 
								 | 
							
								                            FILE_TYPE = item.ContentType,
							 | 
						|||
| 
								 | 
							
								                            ORG_ID = orgId
							 | 
						|||
| 
								 | 
							
								                        };
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                        var inputStream = item.OpenReadStream();
							 | 
						|||
| 
								 | 
							
								                        //支持转换时,按类型转为图片,否则直接存储
							 | 
						|||
| 
								 | 
							
								                        if (isSuppot)
							 | 
						|||
| 
								 | 
							
								                        {
							 | 
						|||
| 
								 | 
							
								                            if (!string.IsNullOrEmpty(host))
							 | 
						|||
| 
								 | 
							
								                            {
							 | 
						|||
| 
								 | 
							
								                                ConvertImageFileParam param = new ConvertImageFileParam();
							 | 
						|||
| 
								 | 
							
								                                param.FileName = fileName;
							 | 
						|||
| 
								 | 
							
								                                Byte[] fileData = new Byte[(int)item.Length];
							 | 
						|||
| 
								 | 
							
								                                Stream sr = inputStream;//创建数据流对象 
							 | 
						|||
| 
								 | 
							
								                                sr.Read(fileData, 0, (int)item.Length);
							 | 
						|||
| 
								 | 
							
								                                param.FileData = fileData;
							 | 
						|||
| 
								 | 
							
								                                string url = host + "ImageConvert/ImageConvert";
							 | 
						|||
| 
								 | 
							
								                                ConvertImageFileParam retModel =
							 | 
						|||
| 
								 | 
							
								                                    WebUtils.Execute<ConvertImageFileParam>(url, param, string.Empty, SendType.Post);
							 | 
						|||
| 
								 | 
							
								                                if (retModel != null && retModel.Files != null && retModel.Files.Any())
							 | 
						|||
| 
								 | 
							
								                                    list.AddRange(retModel.Files);
							 | 
						|||
| 
								 | 
							
								                            }
							 | 
						|||
| 
								 | 
							
								                            else
							 | 
						|||
| 
								 | 
							
								                            {
							 | 
						|||
| 
								 | 
							
								                                var convert = imageConverterFactory.CreateImageConverter(fileName);
							 | 
						|||
| 
								 | 
							
								                                convert.ConvertToImage(fileName, inputStream, list);
							 | 
						|||
| 
								 | 
							
								                            }
							 | 
						|||
| 
								 | 
							
								                            if (isSaveSelf)//保存自身数据
							 | 
						|||
| 
								 | 
							
								                            {
							 | 
						|||
| 
								 | 
							
								                                Byte[] fileData = new Byte[(int)item.Length];
							 | 
						|||
| 
								 | 
							
								                                Stream sr = inputStream;//创建数据流对象 
							 | 
						|||
| 
								 | 
							
								                                sr.Read(fileData, 0, (int)item.Length);
							 | 
						|||
| 
								 | 
							
								                                T_PF_FILE file = new T_PF_FILE
							 | 
						|||
| 
								 | 
							
								                                {
							 | 
						|||
| 
								 | 
							
								                                    FILE_NAME = fileName,
							 | 
						|||
| 
								 | 
							
								                                    FILE_TYPE = item.ContentType,
							 | 
						|||
| 
								 | 
							
								                                    //FILE_DATA = fileData,
							 | 
						|||
| 
								 | 
							
								                                    ORG_ID = orgId,
							 | 
						|||
| 
								 | 
							
								                                    FILE_PATH = filePath + saveName
							 | 
						|||
| 
								 | 
							
								                                };
							 | 
						|||
| 
								 | 
							
								                                imgFile.FILE_ID = file.ID;
							 | 
						|||
| 
								 | 
							
								                                imgFile.Nav_File = file;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                                if (string.IsNullOrEmpty(imgFile.FILE_PATH))
							 | 
						|||
| 
								 | 
							
								                                {
							 | 
						|||
| 
								 | 
							
								                                    imgFile.FILE_PATH = file.FILE_PATH;
							 | 
						|||
| 
								 | 
							
								                                }
							 | 
						|||
| 
								 | 
							
								                                //if (UserChange!=null)
							 | 
						|||
| 
								 | 
							
								                                //{
							 | 
						|||
| 
								 | 
							
								                                //    UserChange.FILE_PATH= file.FILE_PATH;
							 | 
						|||
| 
								 | 
							
								                                //}
							 | 
						|||
| 
								 | 
							
								                                fileList.Add(file);
							 | 
						|||
| 
								 | 
							
								                            }
							 | 
						|||
| 
								 | 
							
								                        }
							 | 
						|||
| 
								 | 
							
								                        else
							 | 
						|||
| 
								 | 
							
								                        {
							 | 
						|||
| 
								 | 
							
								                            ConvertImageFile tmpImgFile = new ConvertImageFile();
							 | 
						|||
| 
								 | 
							
								                            tmpImgFile.FileName = fileName;
							 | 
						|||
| 
								 | 
							
								                            tmpImgFile.FileType = item.ContentType;
							 | 
						|||
| 
								 | 
							
								                            Byte[] fileData = new Byte[(int)item.Length];
							 | 
						|||
| 
								 | 
							
								                            Stream sr = inputStream;//创建数据流对象 
							 | 
						|||
| 
								 | 
							
								                            sr.Read(fileData, 0, (int)item.Length);
							 | 
						|||
| 
								 | 
							
								                            tmpImgFile.FileData = fileData;
							 | 
						|||
| 
								 | 
							
								                            list.Add(tmpImgFile);
							 | 
						|||
| 
								 | 
							
								                        }
							 | 
						|||
| 
								 | 
							
								                        //保存文件数据
							 | 
						|||
| 
								 | 
							
								                        if (list.Any())
							 | 
						|||
| 
								 | 
							
								                        {
							 | 
						|||
| 
								 | 
							
								                            int i = 1;
							 | 
						|||
| 
								 | 
							
								                            foreach (var fileitem in list)
							 | 
						|||
| 
								 | 
							
								                            {
							 | 
						|||
| 
								 | 
							
								                                T_PF_FILE file = new T_PF_FILE
							 | 
						|||
| 
								 | 
							
								                                {
							 | 
						|||
| 
								 | 
							
								                                    ID = Guid.NewGuid(),
							 | 
						|||
| 
								 | 
							
								                                    FILE_NAME = fileitem.FileName,
							 | 
						|||
| 
								 | 
							
								                                    FILE_TYPE = fileitem.FileType,
							 | 
						|||
| 
								 | 
							
								                                    //FILE_DATA = fileitem.FileData,
							 | 
						|||
| 
								 | 
							
								                                    FILE_PATH = filePath + saveName,
							 | 
						|||
| 
								 | 
							
								                                    ORG_ID = orgId
							 | 
						|||
| 
								 | 
							
								                                };
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                                if (!isSuppot && isSaveSelf)
							 | 
						|||
| 
								 | 
							
								                                {
							 | 
						|||
| 
								 | 
							
								                                    imgFile.FILE_ID = file.ID;
							 | 
						|||
| 
								 | 
							
								                                    imgFile.Nav_File = file;
							 | 
						|||
| 
								 | 
							
								                                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                                if (string.IsNullOrEmpty(imgFile.FILE_PATH))
							 | 
						|||
| 
								 | 
							
								                                {
							 | 
						|||
| 
								 | 
							
								                                    imgFile.FILE_PATH = file.FILE_PATH;
							 | 
						|||
| 
								 | 
							
								                                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                                //if (UserChange != null)
							 | 
						|||
| 
								 | 
							
								                                //{
							 | 
						|||
| 
								 | 
							
								                                //    UserChange.FILE_PATH = file.FILE_PATH;
							 | 
						|||
| 
								 | 
							
								                                //}
							 | 
						|||
| 
								 | 
							
								                                T_PF_IMG_FILE_DETAIL detail = new T_PF_IMG_FILE_DETAIL
							 | 
						|||
| 
								 | 
							
								                                {
							 | 
						|||
| 
								 | 
							
								                                    ORG_ID = orgId,
							 | 
						|||
| 
								 | 
							
								                                    IMG_FILE_ID = imgFile.ID,
							 | 
						|||
| 
								 | 
							
								                                    FILE_ID = file.ID,
							 | 
						|||
| 
								 | 
							
								                                    NUM = i
							 | 
						|||
| 
								 | 
							
								                                };
							 | 
						|||
| 
								 | 
							
								                                i++;
							 | 
						|||
| 
								 | 
							
								                                fileList.Add(file);
							 | 
						|||
| 
								 | 
							
								                                imgFileDetailList.Add(detail);
							 | 
						|||
| 
								 | 
							
								                            }
							 | 
						|||
| 
								 | 
							
								                        }
							 | 
						|||
| 
								 | 
							
								                        imgFileList.Add(imgFile);
							 | 
						|||
| 
								 | 
							
								                        result.imgFileID = imgFile.ID;
							 | 
						|||
| 
								 | 
							
								                        result.imgFilePath = imgFile.Nav_File?.FILE_PATH;
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                //if (UserChange!=null)
							 | 
						|||
| 
								 | 
							
								                //{
							 | 
						|||
| 
								 | 
							
								                //    this.UpdateEntity(UserChange);
							 | 
						|||
| 
								 | 
							
								                //}
							 | 
						|||
| 
								 | 
							
								                this.BantchAddEntity(fileList);
							 | 
						|||
| 
								 | 
							
								                this.BantchAddEntity(imgFileList);
							 | 
						|||
| 
								 | 
							
								                this.BantchAddEntity(imgFileDetailList);
							 | 
						|||
| 
								 | 
							
								                return result;
							 | 
						|||
| 
								 | 
							
								            });
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 首页上传修改签名接口
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="filter"></param>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        [HttpPost, Route("UploadFileEditSign")]
							 | 
						|||
| 
								 | 
							
								        public JsonActionResult<dynamic> UploadFileEditSign()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            return SafeExecute<dynamic>(() =>
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                dynamic result = new ExpandoObject();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                var httpRequest = HttpContext.Request;
							 | 
						|||
| 
								 | 
							
								                var strOrgId = httpRequest.Form["OrgId"][0];  // 获取 组织
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                if (string.IsNullOrEmpty(strOrgId))
							 | 
						|||
| 
								 | 
							
								                    throw new Exception("组织不允许为空");
							 | 
						|||
| 
								 | 
							
								                var orgId = new Guid(strOrgId);
							 | 
						|||
| 
								 | 
							
								                //返回的文件地址
							 | 
						|||
| 
								 | 
							
								                List<string> filenames = new List<string>();
							 | 
						|||
| 
								 | 
							
								                var now = DateTime.Now;
							 | 
						|||
| 
								 | 
							
								                //文件存储路径
							 | 
						|||
| 
								 | 
							
								                //var filePath = string.Format("/{0}/{1}/{2}/", now.ToString("yyyy"), now.ToString("yyyyMM"), now.ToString("yyyyMMdd"));
							 | 
						|||
| 
								 | 
							
								                string filePath = GetFilePath(orgId);
							 | 
						|||
| 
								 | 
							
								                var fullFilePath = $"{ ConfigurationManager.AppSettings["Img_Local"]}{filePath}";
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                ImageConverterFactory imageConverterFactory = new ImageConverterFactory();
							 | 
						|||
| 
								 | 
							
								                var host = ConfigurationManager.AppSettings["SapInvokeHost"];
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                List<T_PF_FILE> fileList = new List<T_PF_FILE>();
							 | 
						|||
| 
								 | 
							
								                List<T_PF_IMG_FILE> imgFileList = new List<T_PF_IMG_FILE>();
							 | 
						|||
| 
								 | 
							
								                List<T_PF_IMG_FILE_DETAIL> imgFileDetailList = new List<T_PF_IMG_FILE_DETAIL>();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                var files = httpRequest.Form.Files;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                if (!Directory.Exists(fullFilePath))
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    Directory.CreateDirectory(fullFilePath);
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                var userId = new Guid(httpRequest.Form["userID"][0]);
							 | 
						|||
| 
								 | 
							
								                var user = GetEntity<T_FM_USER>(userId);
							 | 
						|||
| 
								 | 
							
								                foreach (var item in files)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    if (item != null)
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        //文件后缀
							 | 
						|||
| 
								 | 
							
								                        var fileExtension = Path.GetExtension(item.FileName);
							 | 
						|||
| 
								 | 
							
								                        var strDateTime = DateTime.Now.ToString("yyMMddhhmmssfff"); //取得时间字符串
							 | 
						|||
| 
								 | 
							
								                        var strRan = Convert.ToString(new Random().Next(100, 999)); //生成三位随机数
							 | 
						|||
| 
								 | 
							
								                        var saveName = strDateTime + strRan + fileExtension;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                        //插入图片数据
							 | 
						|||
| 
								 | 
							
								                        using (FileStream fs = System.IO.File.Create(fullFilePath + saveName))
							 | 
						|||
| 
								 | 
							
								                        {
							 | 
						|||
| 
								 | 
							
								                            item.CopyTo(fs);
							 | 
						|||
| 
								 | 
							
								                            fs.Flush();
							 | 
						|||
| 
								 | 
							
								                        }
							 | 
						|||
| 
								 | 
							
								                        filenames.Add(filePath + saveName);
							 | 
						|||
| 
								 | 
							
								                        string fileName = item.FileName;
							 | 
						|||
| 
								 | 
							
								                        var pos = fileName.LastIndexOf(".");
							 | 
						|||
| 
								 | 
							
								                        var extendName = fileName.Substring(pos);
							 | 
						|||
| 
								 | 
							
								                        List<ConvertImageFile> list = new List<ConvertImageFile>();
							 | 
						|||
| 
								 | 
							
								                        bool isSuppot = imageConverterFactory.Support(extendName);
							 | 
						|||
| 
								 | 
							
								                        bool isSaveSelf = true;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                        T_PF_IMG_FILE imgFile = new T_PF_IMG_FILE
							 | 
						|||
| 
								 | 
							
								                        {
							 | 
						|||
| 
								 | 
							
								                            FILE_NAME = fileName,
							 | 
						|||
| 
								 | 
							
								                            FILE_TYPE = item.ContentType,
							 | 
						|||
| 
								 | 
							
								                            ORG_ID = orgId
							 | 
						|||
| 
								 | 
							
								                        };
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                        var inputStream = item.OpenReadStream();
							 | 
						|||
| 
								 | 
							
								                        //支持转换时,按类型转为图片,否则直接存储
							 | 
						|||
| 
								 | 
							
								                        if (isSuppot)
							 | 
						|||
| 
								 | 
							
								                        {
							 | 
						|||
| 
								 | 
							
								                            if (!string.IsNullOrEmpty(host))
							 | 
						|||
| 
								 | 
							
								                            {
							 | 
						|||
| 
								 | 
							
								                                ConvertImageFileParam param = new ConvertImageFileParam();
							 | 
						|||
| 
								 | 
							
								                                param.FileName = fileName;
							 | 
						|||
| 
								 | 
							
								                                Byte[] fileData = new Byte[(int)item.Length];
							 | 
						|||
| 
								 | 
							
								                                Stream sr = inputStream;//创建数据流对象 
							 | 
						|||
| 
								 | 
							
								                                sr.Read(fileData, 0, (int)item.Length);
							 | 
						|||
| 
								 | 
							
								                                param.FileData = fileData;
							 | 
						|||
| 
								 | 
							
								                                string url = host + "ImageConvert/ImageConvert";
							 | 
						|||
| 
								 | 
							
								                                ConvertImageFileParam retModel =
							 | 
						|||
| 
								 | 
							
								                                    WebUtils.Execute<ConvertImageFileParam>(url, param, string.Empty, SendType.Post);
							 | 
						|||
| 
								 | 
							
								                                if (retModel != null && retModel.Files != null && retModel.Files.Any())
							 | 
						|||
| 
								 | 
							
								                                    list.AddRange(retModel.Files);
							 | 
						|||
| 
								 | 
							
								                            }
							 | 
						|||
| 
								 | 
							
								                            else
							 | 
						|||
| 
								 | 
							
								                            {
							 | 
						|||
| 
								 | 
							
								                                var convert = imageConverterFactory.CreateImageConverter(fileName);
							 | 
						|||
| 
								 | 
							
								                                convert.ConvertToImage(fileName, inputStream, list);
							 | 
						|||
| 
								 | 
							
								                            }
							 | 
						|||
| 
								 | 
							
								                            if (isSaveSelf)//保存自身数据
							 | 
						|||
| 
								 | 
							
								                            {
							 | 
						|||
| 
								 | 
							
								                                Byte[] fileData = new Byte[(int)item.Length];
							 | 
						|||
| 
								 | 
							
								                                Stream sr = inputStream;//创建数据流对象 
							 | 
						|||
| 
								 | 
							
								                                sr.Read(fileData, 0, (int)item.Length);
							 | 
						|||
| 
								 | 
							
								                                T_PF_FILE file = new T_PF_FILE
							 | 
						|||
| 
								 | 
							
								                                {
							 | 
						|||
| 
								 | 
							
								                                    FILE_NAME = fileName,
							 | 
						|||
| 
								 | 
							
								                                    FILE_TYPE = item.ContentType,
							 | 
						|||
| 
								 | 
							
								                                    //FILE_DATA = fileData,
							 | 
						|||
| 
								 | 
							
								                                    ORG_ID = orgId,
							 | 
						|||
| 
								 | 
							
								                                    FILE_PATH = filePath + saveName
							 | 
						|||
| 
								 | 
							
								                                };
							 | 
						|||
| 
								 | 
							
								                                imgFile.FILE_ID = file.ID;
							 | 
						|||
| 
								 | 
							
								                                imgFile.Nav_File = file;
							 | 
						|||
| 
								 | 
							
								                                if (string.IsNullOrEmpty(imgFile.FILE_PATH))
							 | 
						|||
| 
								 | 
							
								                                {
							 | 
						|||
| 
								 | 
							
								                                    imgFile.FILE_PATH = file.FILE_PATH;
							 | 
						|||
| 
								 | 
							
								                                }
							 | 
						|||
| 
								 | 
							
								                                user.FILE_PATH = file.FILE_PATH;
							 | 
						|||
| 
								 | 
							
								                                fileList.Add(file);
							 | 
						|||
| 
								 | 
							
								                            }
							 | 
						|||
| 
								 | 
							
								                        }
							 | 
						|||
| 
								 | 
							
								                        else
							 | 
						|||
| 
								 | 
							
								                        {
							 | 
						|||
| 
								 | 
							
								                            ConvertImageFile tmpImgFile = new ConvertImageFile();
							 | 
						|||
| 
								 | 
							
								                            tmpImgFile.FileName = fileName;
							 | 
						|||
| 
								 | 
							
								                            tmpImgFile.FileType = item.ContentType;
							 | 
						|||
| 
								 | 
							
								                            Byte[] fileData = new Byte[(int)item.Length];
							 | 
						|||
| 
								 | 
							
								                            Stream sr = inputStream;//创建数据流对象 
							 | 
						|||
| 
								 | 
							
								                            sr.Read(fileData, 0, (int)item.Length);
							 | 
						|||
| 
								 | 
							
								                            tmpImgFile.FileData = fileData;
							 | 
						|||
| 
								 | 
							
								                            list.Add(tmpImgFile);
							 | 
						|||
| 
								 | 
							
								                        }
							 | 
						|||
| 
								 | 
							
								                        //保存文件数据
							 | 
						|||
| 
								 | 
							
								                        if (list.Any())
							 | 
						|||
| 
								 | 
							
								                        {
							 | 
						|||
| 
								 | 
							
								                            int i = 1;
							 | 
						|||
| 
								 | 
							
								                            foreach (var fileitem in list)
							 | 
						|||
| 
								 | 
							
								                            {
							 | 
						|||
| 
								 | 
							
								                                T_PF_FILE file = new T_PF_FILE
							 | 
						|||
| 
								 | 
							
								                                {
							 | 
						|||
| 
								 | 
							
								                                    ID = Guid.NewGuid(),
							 | 
						|||
| 
								 | 
							
								                                    FILE_NAME = fileitem.FileName,
							 | 
						|||
| 
								 | 
							
								                                    FILE_TYPE = fileitem.FileType,
							 | 
						|||
| 
								 | 
							
								                                    //FILE_DATA = fileitem.FileData,
							 | 
						|||
| 
								 | 
							
								                                    FILE_PATH = filePath + saveName,
							 | 
						|||
| 
								 | 
							
								                                    ORG_ID = orgId
							 | 
						|||
| 
								 | 
							
								                                };
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                                if (!isSuppot && isSaveSelf)
							 | 
						|||
| 
								 | 
							
								                                {
							 | 
						|||
| 
								 | 
							
								                                    imgFile.FILE_ID = file.ID;
							 | 
						|||
| 
								 | 
							
								                                    imgFile.Nav_File = file;
							 | 
						|||
| 
								 | 
							
								                                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                                if (string.IsNullOrEmpty(imgFile.FILE_PATH))
							 | 
						|||
| 
								 | 
							
								                                {
							 | 
						|||
| 
								 | 
							
								                                    imgFile.FILE_PATH = file.FILE_PATH;
							 | 
						|||
| 
								 | 
							
								                                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                                user.FILE_PATH = file.FILE_PATH;
							 | 
						|||
| 
								 | 
							
								                                T_PF_IMG_FILE_DETAIL detail = new T_PF_IMG_FILE_DETAIL
							 | 
						|||
| 
								 | 
							
								                                {
							 | 
						|||
| 
								 | 
							
								                                    ORG_ID = orgId,
							 | 
						|||
| 
								 | 
							
								                                    IMG_FILE_ID = imgFile.ID,
							 | 
						|||
| 
								 | 
							
								                                    FILE_ID = file.ID,
							 | 
						|||
| 
								 | 
							
								                                    NUM = i
							 | 
						|||
| 
								 | 
							
								                                };
							 | 
						|||
| 
								 | 
							
								                                i++;
							 | 
						|||
| 
								 | 
							
								                                fileList.Add(file);
							 | 
						|||
| 
								 | 
							
								                                imgFileDetailList.Add(detail);
							 | 
						|||
| 
								 | 
							
								                            }
							 | 
						|||
| 
								 | 
							
								                        }
							 | 
						|||
| 
								 | 
							
								                        imgFileList.Add(imgFile);
							 | 
						|||
| 
								 | 
							
								                        result.imgFileID = imgFile.ID;
							 | 
						|||
| 
								 | 
							
								                        result.imgFilePath = imgFile.Nav_File?.FILE_PATH;
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                var dbEntity = this.GetEntity<T_FM_USER_SIGN_FILE>(t => t.USER_ID == userId);
							 | 
						|||
| 
								 | 
							
								                List<Guid> deleteSignFileIds = new List<Guid>();
							 | 
						|||
| 
								 | 
							
								                if (dbEntity != null)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    if (dbEntity != null)
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        deleteSignFileIds.Add(dbEntity.ID);
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                T_FM_USER_SIGN_FILE userSign = new T_FM_USER_SIGN_FILE()
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    ID = Guid.NewGuid(),
							 | 
						|||
| 
								 | 
							
								                    USER_ID = userId,
							 | 
						|||
| 
								 | 
							
								                    IMG_FILE_ID = imgFileList.FirstOrDefault().ID,
							 | 
						|||
| 
								 | 
							
								                    ORG_ID = orgId,
							 | 
						|||
| 
								 | 
							
								                };
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                this.UpdateEntity(user);
							 | 
						|||
| 
								 | 
							
								                this.BantchAddEntity(fileList);
							 | 
						|||
| 
								 | 
							
								                this.BantchAddEntity(imgFileList);
							 | 
						|||
| 
								 | 
							
								                this.BantchAddEntity(imgFileDetailList);
							 | 
						|||
| 
								 | 
							
								                if (deleteSignFileIds.Any())
							 | 
						|||
| 
								 | 
							
								                    this.DeleteEntityNoCommit<T_FM_USER_SIGN_FILE>(t => deleteSignFileIds.Contains(t.ID));
							 | 
						|||
| 
								 | 
							
								                if (userSign != null)
							 | 
						|||
| 
								 | 
							
								                    this.AddEntity(userSign);
							 | 
						|||
| 
								 | 
							
								                return result;
							 | 
						|||
| 
								 | 
							
								            });
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        public static MemoryStream CompressImageFileStream(FileStream fileStream, int maxSizeInBytes = 2097152) // 1MB = 1024 * 1024 bytes
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            using (var img = new Bitmap(fileStream))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                var quality = 100; // 初始质量设为最高
							 | 
						|||
| 
								 | 
							
								                var encoderParameters = new EncoderParameters(1);
							 | 
						|||
| 
								 | 
							
								                encoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)quality);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                var encoder = GetEncoder(ImageFormat.Jpeg);
							 | 
						|||
| 
								 | 
							
								                MemoryStream memStream = null;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                while (true)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    memStream = new MemoryStream();
							 | 
						|||
| 
								 | 
							
								                    img.Save(memStream, encoder, encoderParameters);
							 | 
						|||
| 
								 | 
							
								                    memStream.Position = 0; // 重置流位置以便重新读取
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                    // 检查压缩后的图片大小是否小于等于指定大小
							 | 
						|||
| 
								 | 
							
								                    if (memStream.Length <= maxSizeInBytes)
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        break; // 压缩成功,跳出循环
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                    else
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        // 如果超过大小限制,降低质量并重试
							 | 
						|||
| 
								 | 
							
								                        quality -= 10; // 每次减少的质量值可以根据需求调整
							 | 
						|||
| 
								 | 
							
								                        if (quality < 0) quality = 0; // 防止质量降到负数
							 | 
						|||
| 
								 | 
							
								                        encoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)quality);
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                // 确保返回的MemoryStream位置在开始,以便读取
							 | 
						|||
| 
								 | 
							
								                if (memStream != null)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    memStream.Position = 0;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                return memStream;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        private static ImageCodecInfo GetEncoder(ImageFormat format)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            var codecs = ImageCodecInfo.GetImageDecoders();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            foreach (var codec in codecs)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                if (codec.FormatID == format.Guid)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    return codec;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            return null;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 上次文件转为图片
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="filter"></param>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        [HttpPost, Route("UploadFile")]
							 | 
						|||
| 
								 | 
							
								        public JsonActionResult<dynamic> UploadFile()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            return SafeExecute<dynamic>(() =>
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                dynamic result = new ExpandoObject();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                var httpRequest = HttpContext.Request;
							 | 
						|||
| 
								 | 
							
								                var strOrgId = httpRequest.Form["OrgId"][0];  // 获取 组织
							 | 
						|||
| 
								 | 
							
								                var strImgID = string.Empty;
							 | 
						|||
| 
								 | 
							
								                if (httpRequest.Form.ContainsKey("imgFileID"))
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    strImgID = httpRequest.Form["imgFileID"][0];
							 | 
						|||
| 
								 | 
							
								                }  // 获取 组织
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                var isSaveSelfStr = httpRequest.Form["IsSaveSelf"].Any() ? httpRequest.Form["IsSaveSelf"][0] : "false";  // 是否存储本身
							 | 
						|||
| 
								 | 
							
								                if (string.IsNullOrEmpty(strOrgId))
							 | 
						|||
| 
								 | 
							
								                    throw new Exception("组织不允许为空");
							 | 
						|||
| 
								 | 
							
								                var orgId = new Guid(strOrgId);
							 | 
						|||
| 
								 | 
							
								                Guid ImgID = Guid.Empty;
							 | 
						|||
| 
								 | 
							
								                if (strImgID != null && !string.IsNullOrEmpty(strImgID))
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    try
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        ImgID = new Guid(strImgID.ToString());
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                    catch { }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                if (ImgID == Guid.Empty)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    ImgID = Guid.NewGuid();
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                //返回的文件地址
							 | 
						|||
| 
								 | 
							
								                //List<string> filenames = new List<string>();
							 | 
						|||
| 
								 | 
							
								                var now = DateTime.Now;
							 | 
						|||
| 
								 | 
							
								                //文件存储路径
							 | 
						|||
| 
								 | 
							
								                //var filePath = string.Format("/{0}/{1}/{2}/", now.ToString("yyyy"), now.ToString("yyyyMM"), now.ToString("yyyyMMdd"));
							 | 
						|||
| 
								 | 
							
								                string filePath = GetFilePath(orgId);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                var fullFilePath = $"{ ConfigurationManager.AppSettings["Img_Local"]}{filePath}";
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                ImageConverterFactory imageConverterFactory = new ImageConverterFactory();
							 | 
						|||
| 
								 | 
							
								                var host = ConfigurationManager.AppSettings["SapInvokeHost"];
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                List<T_PF_FILE> fileList = new List<T_PF_FILE>();
							 | 
						|||
| 
								 | 
							
								                List<T_PF_IMG_FILE> imgFileList = new List<T_PF_IMG_FILE>();
							 | 
						|||
| 
								 | 
							
								                List<T_PF_IMG_FILE_DETAIL> imgFileDetailList = new List<T_PF_IMG_FILE_DETAIL>();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                var files = httpRequest.Form.Files;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                if (!Directory.Exists(fullFilePath))
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    Directory.CreateDirectory(fullFilePath);
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                //wyw 2023-12-15 保存的文件还是用自动生成的文件名吧 省得处理url转译
							 | 
						|||
| 
								 | 
							
								                foreach (var item in files)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    if (item != null)
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        //文件后缀
							 | 
						|||
| 
								 | 
							
								                        var fileExtension = Path.GetExtension(item.FileName);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                        var strDateTime = DateTime.Now.ToString("yyMMddhhmmssfff"); //取得时间字符串
							 | 
						|||
| 
								 | 
							
								                        var strRan = Convert.ToString(new Random().Next(100, 999)); //生成三位随机数
							 | 
						|||
| 
								 | 
							
								                        var saveName = strDateTime + strRan + fileExtension;
							 | 
						|||
| 
								 | 
							
								                        string fileName = item.FileName;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                        //插入图片数据
							 | 
						|||
| 
								 | 
							
								                        using (FileStream fs = System.IO.File.Create(fullFilePath + saveName))//fullFilePath + fileName  wyw
							 | 
						|||
| 
								 | 
							
								                        {
							 | 
						|||
| 
								 | 
							
								                            item.CopyTo(fs);
							 | 
						|||
| 
								 | 
							
								                            fs.Flush();
							 | 
						|||
| 
								 | 
							
								                        }
							 | 
						|||
| 
								 | 
							
								                        if (fileExtension == ".jpg" || fileExtension == ".png" || fileExtension == ".jpeg")
							 | 
						|||
| 
								 | 
							
								                        {
							 | 
						|||
| 
								 | 
							
								                            using (FileStream inputFileStream = new FileStream(fullFilePath + saveName, FileMode.Open, FileAccess.Read))
							 | 
						|||
| 
								 | 
							
								                            {
							 | 
						|||
| 
								 | 
							
								                                MemoryStream compressedStream = CompressImageFileStream(inputFileStream);
							 | 
						|||
| 
								 | 
							
								                                inputFileStream.Close();
							 | 
						|||
| 
								 | 
							
								                                using (FileStream outputFileStream = new FileStream(fullFilePath + saveName, FileMode.Create, FileAccess.Write))
							 | 
						|||
| 
								 | 
							
								                                {
							 | 
						|||
| 
								 | 
							
								                                    compressedStream.CopyTo(outputFileStream);
							 | 
						|||
| 
								 | 
							
								                                }
							 | 
						|||
| 
								 | 
							
								                            }
							 | 
						|||
| 
								 | 
							
								                        }
							 | 
						|||
| 
								 | 
							
								                        //filenames.Add(filePath + fileName);
							 | 
						|||
| 
								 | 
							
								                        var pos = fileName.LastIndexOf(".");
							 | 
						|||
| 
								 | 
							
								                        var extendName = fileName.Substring(pos);
							 | 
						|||
| 
								 | 
							
								                        List<ConvertImageFile> list = new List<ConvertImageFile>();
							 | 
						|||
| 
								 | 
							
								                        bool isSuppot = imageConverterFactory.Support(extendName);
							 | 
						|||
| 
								 | 
							
								                        bool isSaveSelf = true;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                        T_PF_IMG_FILE imgFile = new T_PF_IMG_FILE
							 | 
						|||
| 
								 | 
							
								                        {
							 | 
						|||
| 
								 | 
							
								                            ID = ImgID,
							 | 
						|||
| 
								 | 
							
								                            FILE_NAME = fileName,
							 | 
						|||
| 
								 | 
							
								                            FILE_TYPE = item.ContentType,
							 | 
						|||
| 
								 | 
							
								                            ORG_ID = orgId
							 | 
						|||
| 
								 | 
							
								                        };
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                        var inputStream = item.OpenReadStream();
							 | 
						|||
| 
								 | 
							
								                        //支持转换时,按类型转为图片,否则直接存储
							 | 
						|||
| 
								 | 
							
								                        if (isSuppot)
							 | 
						|||
| 
								 | 
							
								                        {
							 | 
						|||
| 
								 | 
							
								                            if (!string.IsNullOrEmpty(host))
							 | 
						|||
| 
								 | 
							
								                            {
							 | 
						|||
| 
								 | 
							
								                                ConvertImageFileParam param = new ConvertImageFileParam();
							 | 
						|||
| 
								 | 
							
								                                param.FileName = fileName;
							 | 
						|||
| 
								 | 
							
								                                Byte[] fileData = new Byte[(int)item.Length];
							 | 
						|||
| 
								 | 
							
								                                Stream sr = inputStream;//创建数据流对象 
							 | 
						|||
| 
								 | 
							
								                                sr.Read(fileData, 0, (int)item.Length);
							 | 
						|||
| 
								 | 
							
								                                param.FileData = fileData;
							 | 
						|||
| 
								 | 
							
								                                string url = host + "ImageConvert/ImageConvert";
							 | 
						|||
| 
								 | 
							
								                                ConvertImageFileParam retModel =
							 | 
						|||
| 
								 | 
							
								                                    WebUtils.Execute<ConvertImageFileParam>(url, param, string.Empty, SendType.Post);
							 | 
						|||
| 
								 | 
							
								                                if (retModel != null && retModel.Files != null && retModel.Files.Any())
							 | 
						|||
| 
								 | 
							
								                                    list.AddRange(retModel.Files);
							 | 
						|||
| 
								 | 
							
								                            }
							 | 
						|||
| 
								 | 
							
								                            else
							 | 
						|||
| 
								 | 
							
								                            {
							 | 
						|||
| 
								 | 
							
								                                var convert = imageConverterFactory.CreateImageConverter(fileName);
							 | 
						|||
| 
								 | 
							
								                                convert.ConvertToImage(fileName, inputStream, list);
							 | 
						|||
| 
								 | 
							
								                            }
							 | 
						|||
| 
								 | 
							
								                            if (isSaveSelf)//保存自身数据
							 | 
						|||
| 
								 | 
							
								                            {
							 | 
						|||
| 
								 | 
							
								                                Byte[] fileData = new Byte[(int)item.Length];
							 | 
						|||
| 
								 | 
							
								                                Stream sr = inputStream;//创建数据流对象 
							 | 
						|||
| 
								 | 
							
								                                sr.Read(fileData, 0, (int)item.Length);
							 | 
						|||
| 
								 | 
							
								                                T_PF_FILE file = new T_PF_FILE
							 | 
						|||
| 
								 | 
							
								                                {
							 | 
						|||
| 
								 | 
							
								                                    FILE_NAME = fileName,
							 | 
						|||
| 
								 | 
							
								                                    FILE_TYPE = item.ContentType,
							 | 
						|||
| 
								 | 
							
								                                    //FILE_DATA = fileData,
							 | 
						|||
| 
								 | 
							
								                                    ORG_ID = orgId,
							 | 
						|||
| 
								 | 
							
								                                    //FILE_PATH = filePath + fileName
							 | 
						|||
| 
								 | 
							
								                                    FILE_PATH = filePath + saveName//wyw
							 | 
						|||
| 
								 | 
							
								                                };
							 | 
						|||
| 
								 | 
							
								                                imgFile.FILE_ID = file.ID;
							 | 
						|||
| 
								 | 
							
								                                imgFile.Nav_File = file;
							 | 
						|||
| 
								 | 
							
								                                fileList.Add(file);
							 | 
						|||
| 
								 | 
							
								                            }
							 | 
						|||
| 
								 | 
							
								                        }
							 | 
						|||
| 
								 | 
							
								                        else
							 | 
						|||
| 
								 | 
							
								                        {
							 | 
						|||
| 
								 | 
							
								                            ConvertImageFile tmpImgFile = new ConvertImageFile();
							 | 
						|||
| 
								 | 
							
								                            //tmpImgFile.FileName = fileName;
							 | 
						|||
| 
								 | 
							
								                            tmpImgFile.FileName = saveName;//wyw
							 | 
						|||
| 
								 | 
							
								                            tmpImgFile.FileType = item.ContentType;
							 | 
						|||
| 
								 | 
							
								                            Byte[] fileData = new Byte[(int)item.Length];
							 | 
						|||
| 
								 | 
							
								                            Stream sr = inputStream;//创建数据流对象 
							 | 
						|||
| 
								 | 
							
								                            sr.Read(fileData, 0, (int)item.Length);
							 | 
						|||
| 
								 | 
							
								                            tmpImgFile.FileData = fileData;
							 | 
						|||
| 
								 | 
							
								                            list.Add(tmpImgFile);
							 | 
						|||
| 
								 | 
							
								                        }
							 | 
						|||
| 
								 | 
							
								                        //保存文件数据
							 | 
						|||
| 
								 | 
							
								                        if (list.Any())
							 | 
						|||
| 
								 | 
							
								                        {
							 | 
						|||
| 
								 | 
							
								                            int i = 1;
							 | 
						|||
| 
								 | 
							
								                            foreach (var fileitem in list)
							 | 
						|||
| 
								 | 
							
								                            {
							 | 
						|||
| 
								 | 
							
								                                T_PF_FILE file = new T_PF_FILE
							 | 
						|||
| 
								 | 
							
								                                {
							 | 
						|||
| 
								 | 
							
								                                    ID = Guid.NewGuid(),
							 | 
						|||
| 
								 | 
							
								                                    FILE_NAME = fileitem.FileName,
							 | 
						|||
| 
								 | 
							
								                                    FILE_TYPE = fileitem.FileType,
							 | 
						|||
| 
								 | 
							
								                                    //FILE_DATA = fileitem.FileData,
							 | 
						|||
| 
								 | 
							
								                                    //FILE_PATH = filePath + fileName,
							 | 
						|||
| 
								 | 
							
								                                    FILE_PATH = filePath + saveName,//wyw,
							 | 
						|||
| 
								 | 
							
								                                    ORG_ID = orgId
							 | 
						|||
| 
								 | 
							
								                                };
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                                if (!isSuppot && isSaveSelf)
							 | 
						|||
| 
								 | 
							
								                                {
							 | 
						|||
| 
								 | 
							
								                                    imgFile.FILE_ID = file.ID;
							 | 
						|||
| 
								 | 
							
								                                    imgFile.Nav_File = file;
							 | 
						|||
| 
								 | 
							
								                                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                                if (string.IsNullOrEmpty(imgFile.FILE_PATH) && !string.IsNullOrEmpty(file.FILE_PATH))
							 | 
						|||
| 
								 | 
							
								                                {
							 | 
						|||
| 
								 | 
							
								                                    imgFile.FILE_PATH = file.FILE_PATH;
							 | 
						|||
| 
								 | 
							
								                                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                                T_PF_IMG_FILE_DETAIL detail = new T_PF_IMG_FILE_DETAIL
							 | 
						|||
| 
								 | 
							
								                                {
							 | 
						|||
| 
								 | 
							
								                                    ORG_ID = orgId,
							 | 
						|||
| 
								 | 
							
								                                    IMG_FILE_ID = imgFile.ID,
							 | 
						|||
| 
								 | 
							
								                                    FILE_ID = file.ID,
							 | 
						|||
| 
								 | 
							
								                                    NUM = i
							 | 
						|||
| 
								 | 
							
								                                };
							 | 
						|||
| 
								 | 
							
								                                i++;
							 | 
						|||
| 
								 | 
							
								                                fileList.Add(file);
							 | 
						|||
| 
								 | 
							
								                                imgFileDetailList.Add(detail);
							 | 
						|||
| 
								 | 
							
								                            }
							 | 
						|||
| 
								 | 
							
								                        }
							 | 
						|||
| 
								 | 
							
								                        imgFileList.Add(imgFile);
							 | 
						|||
| 
								 | 
							
								                        result.imgFileID = imgFile.ID;
							 | 
						|||
| 
								 | 
							
								                        result.imgFilePath = imgFile.Nav_File?.FILE_PATH;
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                this.BantchAddEntity(fileList);
							 | 
						|||
| 
								 | 
							
								                this.BantchAddEntity(imgFileList);
							 | 
						|||
| 
								 | 
							
								                this.BantchAddEntity(imgFileDetailList);
							 | 
						|||
| 
								 | 
							
								                return result;
							 | 
						|||
| 
								 | 
							
								            });
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 根据ID获取文件数据
							 | 
						|||
| 
								 | 
							
								        /// </summary> 
							 | 
						|||
| 
								 | 
							
								        /// <param name="id"></param>
							 | 
						|||
| 
								 | 
							
								        [HttpGet, Route("GetFile")]
							 | 
						|||
| 
								 | 
							
								        public void GetFile(string id)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            if (string.IsNullOrEmpty(id)) return;
							 | 
						|||
| 
								 | 
							
								            var file = this.GetEntity<T_PF_FILE>(id);
							 | 
						|||
| 
								 | 
							
								            if (file == null) return;
							 | 
						|||
| 
								 | 
							
								            var syncIOFeature = HttpContext.Features.Get<IHttpBodyControlFeature>();
							 | 
						|||
| 
								 | 
							
								            if (syncIOFeature != null)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                syncIOFeature.AllowSynchronousIO = true;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            SetData(file.FILE_NAME, file.FILE_TYPE, file.FILE_DATA);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 根据ID获取文件数据
							 | 
						|||
| 
								 | 
							
								        /// </summary> 
							 | 
						|||
| 
								 | 
							
								        /// <param name="id"></param>
							 | 
						|||
| 
								 | 
							
								        [HttpGet, Route("GetFilePath")]
							 | 
						|||
| 
								 | 
							
								        public JsonActionResult<string> GetFilePath(string id)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            return SafeExecute<string>(() =>
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                if (string.IsNullOrEmpty(id)) return "";
							 | 
						|||
| 
								 | 
							
								                var file = this.GetEntity<T_PF_FILE>(id);
							 | 
						|||
| 
								 | 
							
								                if (file == null) return "";
							 | 
						|||
| 
								 | 
							
								                return file.FILE_PATH;
							 | 
						|||
| 
								 | 
							
								            });
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 根据ID获取文件数据
							 | 
						|||
| 
								 | 
							
								        /// </summary> 
							 | 
						|||
| 
								 | 
							
								        /// <param name="name"></param>
							 | 
						|||
| 
								 | 
							
								        [HttpGet, Route("GetFileByName")]
							 | 
						|||
| 
								 | 
							
								        public void GetFileByName(string name)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            if (string.IsNullOrEmpty(name)) return;
							 | 
						|||
| 
								 | 
							
								            var file = this.GetEntity<T_PF_FILE>(i => i.FILE_NAME == name);
							 | 
						|||
| 
								 | 
							
								            if (file == null) return;
							 | 
						|||
| 
								 | 
							
								            var syncIOFeature = HttpContext.Features.Get<IHttpBodyControlFeature>();
							 | 
						|||
| 
								 | 
							
								            if (syncIOFeature != null)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                syncIOFeature.AllowSynchronousIO = true;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            SetData(file.FILE_NAME, file.FILE_TYPE, file.FILE_DATA);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="id"></param>
							 | 
						|||
| 
								 | 
							
								        [HttpGet, Route("GetFileByPath")]
							 | 
						|||
| 
								 | 
							
								        public void GetFileByPath(string id)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            if (string.IsNullOrEmpty(id)) return;
							 | 
						|||
| 
								 | 
							
								            var file = this.GetEntity<T_PF_FILE>(id);
							 | 
						|||
| 
								 | 
							
								            if (file == null) return;
							 | 
						|||
| 
								 | 
							
								            var ss = file.FILE_PATH;
							 | 
						|||
| 
								 | 
							
								            byte[] zipdata = System.IO.File.ReadAllBytes(ss);
							 | 
						|||
| 
								 | 
							
								            SetData(file.FILE_NAME, file.FILE_TYPE, zipdata);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private void SetData(string fileName, string contentType, byte[] data)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            var httpResponse = HttpContext.Response;
							 | 
						|||
| 
								 | 
							
								            httpResponse.ContentType = contentType;
							 | 
						|||
| 
								 | 
							
								            string encodeFilename = System.Net.WebUtility.UrlEncode(fileName);
							 | 
						|||
| 
								 | 
							
								            httpResponse.Headers.Add("Content-Disposition", "attachment;filename=" + encodeFilename);
							 | 
						|||
| 
								 | 
							
								            //httpResponse.Body.Write(file.FILE_DATA,0,file.FILE_DATA.Length);
							 | 
						|||
| 
								 | 
							
								            //httpResponse.Body.Flush();
							 | 
						|||
| 
								 | 
							
								            int bufferSize = 1024;
							 | 
						|||
| 
								 | 
							
								            using (Response.Body)//调用Response.Body.Dispose()并不会关闭客户端浏览器到ASP.NET Core服务器的连接,之后还可以继续往Response.Body中写入数据
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                long contentLength = data.Length;//获取下载文件的大小
							 | 
						|||
| 
								 | 
							
								                Response.ContentLength = contentLength;//在Response的Header中设置下载文件的大小,这样客户端浏览器才能正确显示下载的进度
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                byte[] buffer;
							 | 
						|||
| 
								 | 
							
								                long hasRead = 0;//变量hasRead用于记录已经发送了多少字节的数据到客户端浏览器
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                //如果hasRead小于contentLength,说明下载文件还没读取完毕,继续循环读取下载文件的内容,并发送到客户端浏览器
							 | 
						|||
| 
								 | 
							
								                while (hasRead < contentLength)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    //HttpContext.RequestAborted.IsCancellationRequested可用于检测客户端浏览器和ASP.NET Core服务器之间的连接状态,如果HttpContext.RequestAborted.IsCancellationRequested返回true,说明客户端浏览器中断了连接
							 | 
						|||
| 
								 | 
							
								                    if (HttpContext.RequestAborted.IsCancellationRequested)
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        //如果客户端浏览器中断了到ASP.NET Core服务器的连接,这里应该立刻break,取消下载文件的读取和发送,避免服务器耗费资源
							 | 
						|||
| 
								 | 
							
								                        break;
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                    buffer = new byte[bufferSize];
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                    int currentRead = data.Length - hasRead > bufferSize ? bufferSize :
							 | 
						|||
| 
								 | 
							
								                       data.Length - (int)hasRead;//  fs.Read(buffer, 0, bufferSize);//从下载文件中读取bufferSize(1024字节)大小的内容到服务器内存中
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                    Array.Copy(data, hasRead, buffer, 0, currentRead);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                    var r = Response.Body.WriteAsync(buffer, 0, currentRead);//发送读取的内容数据到客户端浏览器
							 | 
						|||
| 
								 | 
							
								                    r.Wait();
							 | 
						|||
| 
								 | 
							
								                    Response.Body.Flush();//注意每次Write后,要及时调用Flush方法,及时释放服务器内存空间
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                    hasRead += currentRead;//更新已经发送到客户端浏览器的字节数
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 根据OrgId获取文件夹名称
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="OrgId"></param>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        public string GetFilePath(Guid OrgId)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            string orgid = OrgId.ToString().ToUpperInvariant();
							 | 
						|||
| 
								 | 
							
								            string pathHead = "";
							 | 
						|||
| 
								 | 
							
								            if (OrgId != new Guid())
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                List<EnumberEntity> listHead = EnumToList<FilePathHead>();
							 | 
						|||
| 
								 | 
							
								                //var info = listHead.Find(e => e.Desction.Contains("," + orgid + ","));
							 | 
						|||
| 
								 | 
							
								                var info = listHead.FirstOrDefault(e => e.Desction == orgid);
							 | 
						|||
| 
								 | 
							
								                if (info != null)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    pathHead = info.EnumName;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            DateTime dtNow = DateTime.Now;
							 | 
						|||
| 
								 | 
							
								            //var strRan = Convert.ToString(new Random().Next(100, 999)); //生成三位随机数
							 | 
						|||
| 
								 | 
							
								            var filePath = string.Format("/{0}/{1}/{2}/", dtNow.ToString("yyyy"), dtNow.ToString("yyyyMM"), dtNow.ToString("yyyyMMdd"));
							 | 
						|||
| 
								 | 
							
								            return string.IsNullOrEmpty(pathHead) ? filePath : "/" + pathHead + filePath;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        public static List<EnumberEntity> EnumToList<T>()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            List<EnumberEntity> list = new List<EnumberEntity>();
							 | 
						|||
| 
								 | 
							
								            foreach (var e in Enum.GetValues(typeof(T)))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                EnumberEntity m = new EnumberEntity();
							 | 
						|||
| 
								 | 
							
								                object[] objArr = e.GetType().GetField(e.ToString()).GetCustomAttributes(typeof(DescriptionAttribute), true);
							 | 
						|||
| 
								 | 
							
								                if (objArr != null && objArr.Length > 0)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    DescriptionAttribute da = objArr[0] as DescriptionAttribute;
							 | 
						|||
| 
								 | 
							
								                    m.Desction = da.Description;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                m.EnumValue = Convert.ToInt32(e);
							 | 
						|||
| 
								 | 
							
								                m.EnumName = e.ToString();
							 | 
						|||
| 
								 | 
							
								                list.Add(m);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            return list;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /// <summary>
							 | 
						|||
| 
								 | 
							
								    /// 枚举类
							 | 
						|||
| 
								 | 
							
								    /// </summary>
							 | 
						|||
| 
								 | 
							
								    public class EnumberEntity
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        /// <summary>  
							 | 
						|||
| 
								 | 
							
								        /// 枚举的描述  
							 | 
						|||
| 
								 | 
							
								        /// </summary>  
							 | 
						|||
| 
								 | 
							
								        public string Desction { set; get; }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>  
							 | 
						|||
| 
								 | 
							
								        /// 枚举名称  
							 | 
						|||
| 
								 | 
							
								        /// </summary>  
							 | 
						|||
| 
								 | 
							
								        public string EnumName { set; get; }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>  
							 | 
						|||
| 
								 | 
							
								        /// 枚举对象的值  
							 | 
						|||
| 
								 | 
							
								        /// </summary>  
							 | 
						|||
| 
								 | 
							
								        public int EnumValue { set; get; }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 |