| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  | using BLL; | 
					
						
							|  |  |  |  | using System; | 
					
						
							| 
									
										
										
										
											2023-08-10 11:40:02 +08:00
										 |  |  |  | using System.Collections.Generic; | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  | using System.Configuration; | 
					
						
							|  |  |  |  | using System.Drawing; | 
					
						
							|  |  |  |  | using System.IO; | 
					
						
							| 
									
										
										
										
											2023-08-10 11:40:02 +08:00
										 |  |  |  | using System.Net.Http; | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  | using System.Text; | 
					
						
							| 
									
										
										
										
											2023-08-10 11:40:02 +08:00
										 |  |  |  | using System.Threading.Tasks; | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  | using System.Web; | 
					
						
							|  |  |  |  | using System.Web.Http; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | namespace WebAPI.Controllers | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  |     /// <summary> | 
					
						
							|  |  |  |  |     /// 附件上传 | 
					
						
							|  |  |  |  |     /// </summary> | 
					
						
							|  |  |  |  |     public class FileUploadController : ApiController | 
					
						
							|  |  |  |  |     { | 
					
						
							|  |  |  |  |         #region 附件上传 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 附件上传 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         /// <returns></returns> | 
					
						
							|  |  |  |  |         public IHttpActionResult Post() | 
					
						
							| 
									
										
										
										
											2023-08-10 11:40:02 +08:00
										 |  |  |  |         {// 定义允许上传的文件类型列表 | 
					
						
							|  |  |  |  |             List<string> allowExtensions = BLL.DropListService.allowExtensions; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |             HttpFileCollection files = HttpContext.Current.Request.Files; | 
					
						
							|  |  |  |  |             string typeName = HttpContext.Current.Request["typeName"]; | 
					
						
							|  |  |  |  |             if (string.IsNullOrEmpty(typeName)) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 typeName = "WebApi"; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             string reUrl = string.Empty; | 
					
						
							|  |  |  |  |             if (files != null && files.Count > 0) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 string folderUrl = "FileUpLoad/" + typeName + "/" + DateTime.Now.ToString("yyyy-MM") + "/"; | 
					
						
							|  |  |  |  |                 string localRoot = ConfigurationManager.AppSettings["localRoot"] + folderUrl; //物理路径 | 
					
						
							|  |  |  |  |                 if (!Directory.Exists(localRoot)) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     Directory.CreateDirectory(localRoot); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 foreach (string key in files.AllKeys) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     string rootUrl = string.Empty; | 
					
						
							|  |  |  |  |                     string fileName = string.Empty; | 
					
						
							|  |  |  |  |                     string extensionstr = string.Empty; | 
					
						
							|  |  |  |  |                     HttpPostedFile file = files[key];//file.ContentLength文件长度 | 
					
						
							| 
									
										
										
										
											2023-08-10 11:40:02 +08:00
										 |  |  |  |                     if (!allowExtensions.Contains(Path.GetExtension(file.FileName))) | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         return BadRequest($"Invalid file extension: {file.FileName}"); | 
					
						
							|  |  |  |  |                     } | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |                     if (!string.IsNullOrEmpty(file.FileName)) | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         extensionstr = Path.GetExtension(file.FileName).ToLower(); | 
					
						
							|  |  |  |  |                         fileName = SQLHelper.GetNewID() + extensionstr; | 
					
						
							|  |  |  |  |                         rootUrl = localRoot + fileName; | 
					
						
							|  |  |  |  |                         file.SaveAs(localRoot + fileName);                       | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                     if (extensionstr==".jpg" || extensionstr == ".gif" || extensionstr == ".bmp" || extensionstr == ".png") | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         string TakePicDateTime = string.Empty; | 
					
						
							|  |  |  |  |                         System.Drawing.Image image = System.Drawing.Image.FromStream(file.InputStream, true, false); | 
					
						
							|  |  |  |  |                         Encoding ascii = Encoding.ASCII; | 
					
						
							|  |  |  |  |                         //遍历图像文件元数据,检索所有属性 | 
					
						
							|  |  |  |  |                         foreach (System.Drawing.Imaging.PropertyItem p in image.PropertyItems) | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             //如果是PropertyTagDateTime,则返回该属性所对应的值 | 
					
						
							|  |  |  |  |                             if (p.Id == 0x0132) | 
					
						
							|  |  |  |  |                             { | 
					
						
							|  |  |  |  |                                 TakePicDateTime = ascii.GetString(p.Value); | 
					
						
							|  |  |  |  |                             } | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                         TakePicDateTime = string.IsNullOrEmpty(TakePicDateTime) ? string.Format("{0:yyyy-MM-dd HH:mm:ss}", DateTime.Now) : TakePicDateTime; | 
					
						
							|  |  |  |  |                         if (!string.IsNullOrEmpty(TakePicDateTime)) | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             ////获取元数据中的拍照日期时间,以字符串形式保存 | 
					
						
							|  |  |  |  |                             //TakePicDateTime = GetTakePicDateTime(pi); | 
					
						
							|  |  |  |  |                             //分析字符串分别保存拍照日期和时间的标准格式 | 
					
						
							|  |  |  |  |                             var SpaceLocation = TakePicDateTime.IndexOf(" "); | 
					
						
							|  |  |  |  |                             var dt = TakePicDateTime.Substring(0, SpaceLocation); | 
					
						
							|  |  |  |  |                             dt = dt.Replace(":", "-"); | 
					
						
							|  |  |  |  |                             var tm = TakePicDateTime.Substring(SpaceLocation + 1, TakePicDateTime.Length - SpaceLocation - 2); | 
					
						
							|  |  |  |  |                             TakePicDateTime = dt + " " + tm; | 
					
						
							|  |  |  |  |                             //由列表中的文件创建内存位图对象 | 
					
						
							|  |  |  |  |                             var Pic = new Bitmap(rootUrl); | 
					
						
							|  |  |  |  |                             //由位图对象创建Graphics对象的实例 | 
					
						
							|  |  |  |  |                             var g = Graphics.FromImage(Pic); | 
					
						
							|  |  |  |  |                             Font ft = new Font("宋体", 20, FontStyle.Regular, GraphicsUnit.Point, ((byte)(134)));//定义字体 | 
					
						
							|  |  |  |  |                             //在Graphics表面绘制数码照片的日期/时间戳 | 
					
						
							|  |  |  |  |                             g.DrawString(TakePicDateTime, ft, Brushes.Gold, 0, Pic.Height - 100); | 
					
						
							|  |  |  |  |                             //  - 50); | 
					
						
							|  |  |  |  |                             string newRoot = localRoot + "newfile/"; | 
					
						
							|  |  |  |  |                             if (!Directory.Exists(newRoot)) | 
					
						
							|  |  |  |  |                             { | 
					
						
							|  |  |  |  |                                 Directory.CreateDirectory(newRoot); | 
					
						
							|  |  |  |  |                             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                             //将添加日期/时间戳后的图像进行保存                        | 
					
						
							|  |  |  |  |                             Pic.Save(newRoot + fileName); | 
					
						
							|  |  |  |  |                             fileName = "newfile/" + fileName; | 
					
						
							|  |  |  |  |                             //释放内存位图对象 | 
					
						
							|  |  |  |  |                             Pic.Dispose(); | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                     if (!string.IsNullOrEmpty(fileName)) | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         if (string.IsNullOrEmpty(reUrl)) | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             reUrl += folderUrl + fileName; | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                         else | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             reUrl += "," + folderUrl + fileName; | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             return Ok(reUrl); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |         #endregion | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         #region 保存附件信息 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 保存附件信息 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         /// <param name="toDoItem">附件</param> | 
					
						
							|  |  |  |  |         [HttpPost] | 
					
						
							|  |  |  |  |         public Model.ResponeData SaveAttachUrl([FromBody] Model.ToDoItem toDoItem) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             var responeData = new Model.ResponeData(); | 
					
						
							|  |  |  |  |             try | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 APIUpLoadFileService.SaveAttachUrl(toDoItem); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             catch (Exception ex) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 responeData.code = 0; | 
					
						
							|  |  |  |  |                 responeData.message = ex.Message; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             return responeData; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |         #endregion | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         #region 附件上传 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 附件上传 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         /// <returns></returns> | 
					
						
							|  |  |  |  |         public IHttpActionResult PostSmall() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             HttpFileCollection files = HttpContext.Current.Request.Files; | 
					
						
							|  |  |  |  |             string typeName = HttpContext.Current.Request["typeName"]; | 
					
						
							|  |  |  |  |             if (string.IsNullOrEmpty(typeName)) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 typeName = "WebApi"; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             string reUrl = string.Empty; | 
					
						
							|  |  |  |  |             if (files != null && files.Count > 0) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 string folderUrl = "FileUpLoad/" + typeName + "/" + DateTime.Now.ToString("yyyy-MM") + "/"; | 
					
						
							|  |  |  |  |                 string localRoot = ConfigurationManager.AppSettings["localRoot"] + folderUrl; //物理路径 | 
					
						
							|  |  |  |  |                 if (!Directory.Exists(localRoot)) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     Directory.CreateDirectory(localRoot); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 foreach (string key in files.AllKeys) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     HttpPostedFile file = files[key];//file.ContentLength文件长度 | 
					
						
							|  |  |  |  |                     reUrl = UpLoadImageService.UpLoadImage(file, folderUrl, folderUrl + "Small/", 80, 30); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             return Ok(reUrl); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |         #endregion | 
					
						
							| 
									
										
										
										
											2023-08-10 11:40:02 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |         #region 在线编辑回调保存文件 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 在线编辑回调保存文件 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         /// <param name="toDoItem"></param> | 
					
						
							|  |  |  |  |         /// <returns></returns> | 
					
						
							|  |  |  |  |         [HttpPost] | 
					
						
							|  |  |  |  |         public async Task<Model.ResponeData> DownloadDocument([FromBody] Model.SaveOnlineFileItem toDoItem) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             var responeData = new Model.ResponeData(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             HttpClient _httpClient = new HttpClient(); | 
					
						
							|  |  |  |  |             try | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 // 发送 GET 请求以获取文件内容 | 
					
						
							|  |  |  |  |                 var response = await _httpClient.GetAsync(toDoItem.UrlStr); | 
					
						
							|  |  |  |  |                 response.EnsureSuccessStatusCode(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 string savePath = ""; | 
					
						
							|  |  |  |  |                 if (!string.IsNullOrEmpty(toDoItem.PCUrl)) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     savePath = ConfigurationManager.AppSettings["localRoot"] + toDoItem.PCUrl; | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 if (savePath != null) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     // 将文件内容保存到本地 | 
					
						
							|  |  |  |  |                     using (var fileStream = File.Create(savePath)) | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         await response.Content.CopyToAsync(fileStream); | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                     responeData.code = 1; | 
					
						
							|  |  |  |  |                     responeData.data = "文件已成功下载并保存到本地"; | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 else | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     responeData.code = 0; | 
					
						
							|  |  |  |  |                     responeData.message = "保存路径为空"; | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             catch (Exception ex) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 responeData.code = 0; | 
					
						
							|  |  |  |  |                 responeData.message = $"下载文件时出现错误:{ex.Message}"; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             return responeData; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         #endregion | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |     } | 
					
						
							|  |  |  |  | } |