208 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			208 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | using System; | |||
|  | using System.IO; | |||
|  | using System.Linq; | |||
|  | using System.Net; | |||
|  | using System.Text; | |||
|  | 
 | |||
|  | namespace BLL | |||
|  | { | |||
|  |     public static class APIUpLoadFileService | |||
|  |     { | |||
|  |         public static string Pic(string url, string filePath) | |||
|  |         { | |||
|  |             // 时间戳,用做boundary | |||
|  |             string timeStamp = DateTime.Now.Ticks.ToString("x"); | |||
|  |             //根据uri创建HttpWebRequest对象 | |||
|  |             HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(new Uri(url)); | |||
|  |             httpReq.Method = "POST"; | |||
|  |             httpReq.AllowWriteStreamBuffering = false; //对发送的数据不使用缓存 | |||
|  |             httpReq.Timeout = 300000;  //设置获得响应的超时时间(300秒) | |||
|  |             httpReq.ContentType = "multipart/form-data; boundary=" + timeStamp; | |||
|  |             //文件 | |||
|  |             FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read); | |||
|  |             BinaryReader binaryReader = new BinaryReader(fileStream); | |||
|  |             //头信息 | |||
|  |             string boundary = "--" + timeStamp; | |||
|  |             string dataFormat = boundary + "\r\nContent-Disposition: form-data; name=imgs;filename=\"{1}\"\r\nContent-Type:application/octet-stream\r\n\r\n"; | |||
|  |             string header = string.Format(dataFormat, "file", Path.GetFileName(filePath)); | |||
|  |             byte[] postHeaderBytes = Encoding.UTF8.GetBytes(header); | |||
|  | 
 | |||
|  |             //结束边界 | |||
|  |             byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + timeStamp + "--\r\n"); | |||
|  | 
 | |||
|  |             long length = fileStream.Length + postHeaderBytes.Length + boundaryBytes.Length; | |||
|  | 
 | |||
|  |             httpReq.ContentLength = length;//请求内容长度 | |||
|  |             string returnValue = ""; | |||
|  |             try | |||
|  |             { | |||
|  |                 //每次上传4k | |||
|  |                 int bufferLength = 4096; | |||
|  |                 byte[] buffer = new byte[bufferLength]; | |||
|  | 
 | |||
|  |                 //已上传的字节数 | |||
|  |                 long offset = 0; | |||
|  |                 int size = binaryReader.Read(buffer, 0, bufferLength); | |||
|  |                 Stream postStream = httpReq.GetRequestStream(); | |||
|  | 
 | |||
|  |                 //发送请求头部消息 | |||
|  |                 postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length); | |||
|  | 
 | |||
|  |                 while (size > 0) | |||
|  |                 { | |||
|  |                     postStream.Write(buffer, 0, size); | |||
|  |                     offset += size; | |||
|  |                     size = binaryReader.Read(buffer, 0, bufferLength); | |||
|  |                 } | |||
|  | 
 | |||
|  |                 //添加尾部边界 | |||
|  |                 postStream.Write(boundaryBytes, 0, boundaryBytes.Length); | |||
|  |                 postStream.Close(); | |||
|  | 
 | |||
|  |                 //获取服务器端的响应 | |||
|  |                 using (HttpWebResponse response = (HttpWebResponse)httpReq.GetResponse()) | |||
|  |                 { | |||
|  |                     Stream receiveStream = response.GetResponseStream(); | |||
|  |                     StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8); | |||
|  |                     returnValue = readStream.ReadToEnd(); | |||
|  |                     response.Close(); | |||
|  |                     readStream.Close(); | |||
|  |                 } | |||
|  |             } | |||
|  |             catch (Exception ex) | |||
|  |             { | |||
|  |                 returnValue = ""; | |||
|  |             } | |||
|  |             finally | |||
|  |             { | |||
|  |                 fileStream.Close(); | |||
|  |                 binaryReader.Close(); | |||
|  |             } | |||
|  |             return returnValue; | |||
|  |         } | |||
|  | 
 | |||
|  | 
 | |||
|  |         public static String saveImg(String url) | |||
|  |         { | |||
|  |             WebClient mywebclient = new WebClient(); | |||
|  |             string newfilename = Guid.NewGuid() + DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString() + ".jpg"; | |||
|  |             string subPath = @"d:\imgs\"; | |||
|  |             if (false == System.IO.Directory.Exists(subPath)) | |||
|  |             { | |||
|  |                 //创建pic文件夹 | |||
|  |                 Directory.CreateDirectory(subPath); | |||
|  |             } | |||
|  |             string filepath = @"d:\imgs\" + newfilename; | |||
|  |             try | |||
|  |             { | |||
|  |                 mywebclient.DownloadFile(url, filepath); | |||
|  |             } | |||
|  |             catch (Exception ex) | |||
|  |             { | |||
|  |                 filepath = ""; | |||
|  |             } | |||
|  |             return filepath; | |||
|  |         } | |||
|  | 
 | |||
|  |         /// <summary> | |||
|  |         /// 保存附件方法 | |||
|  |         /// </summary> | |||
|  |         public static void SaveAttachUrl(Model.ToDoItem toDoItem) | |||
|  |         { | |||
|  |             using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) | |||
|  |             { | |||
|  |                 ////保存附件 | |||
|  |                 if (!string.IsNullOrEmpty(toDoItem.UrlStr)) | |||
|  |                 { | |||
|  |                     if (toDoItem.IsInsert == "1") | |||
|  |                     { | |||
|  |                         var att = db.AttachFile.FirstOrDefault(x => x.ToKeyId == toDoItem.DataId); | |||
|  |                         if (att != null) | |||
|  |                         { | |||
|  |                             toDoItem.UrlStr = att.AttachUrl + "," + toDoItem.UrlStr; | |||
|  |                         } | |||
|  |                     } | |||
|  |                     UploadFileService.SaveAttachUrl(UploadFileService.GetSourceByAttachUrl(toDoItem.UrlStr, 10, null), toDoItem.UrlStr, toDoItem.MenuId, toDoItem.DataId); | |||
|  |                 } | |||
|  |                 else | |||
|  |                 { | |||
|  |                     CommonService.DeleteAttachFileById(toDoItem.DataId); | |||
|  |                 } | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  |         public static void SaveAttachUrl(string menuId, string dataId, string url, string isInsert) | |||
|  |         { | |||
|  |             ////保存附件 | |||
|  |             if (!string.IsNullOrEmpty(url)) | |||
|  |             { | |||
|  |                 if (isInsert == "1") | |||
|  |                 { | |||
|  |                     var att = Funs.DB.AttachFile.FirstOrDefault(x => x.ToKeyId == dataId); | |||
|  |                     if (att != null) | |||
|  |                     { | |||
|  |                         url = att.AttachUrl + "," + url; | |||
|  |                     } | |||
|  |                 } | |||
|  |                 UploadFileService.SaveAttachUrl(UploadFileService.GetSourceByAttachUrl(url, 10, null), url, menuId, dataId); | |||
|  |             } | |||
|  |             else | |||
|  |             { | |||
|  |                 CommonService.DeleteAttachFileById(dataId); | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  |         /// <summary> | |||
|  |         ///  获取附件路径 | |||
|  |         /// </summary> | |||
|  |         /// <returns></returns> | |||
|  |         public static string getFileUrl(string tokeyId, string url) | |||
|  |         { | |||
|  |             string fileUrl = url; | |||
|  |             using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) | |||
|  |             { | |||
|  |                 if (!string.IsNullOrEmpty(tokeyId)) | |||
|  |                 { | |||
|  |                     var getAtt = db.AttachFile.FirstOrDefault(x => x.ToKeyId == tokeyId); | |||
|  |                     if (getAtt != null && !string.IsNullOrEmpty(getAtt.AttachUrl)) | |||
|  |                     { | |||
|  |                         fileUrl = getAtt.AttachUrl; | |||
|  |                     } | |||
|  |                 } | |||
|  | 
 | |||
|  |                 if (!string.IsNullOrEmpty(fileUrl)) | |||
|  |                 { | |||
|  |                     fileUrl = fileUrl.Replace('\\', '/'); | |||
|  |                 } | |||
|  |             } | |||
|  |             return fileUrl; | |||
|  |         } | |||
|  | 
 | |||
|  |         /// <summary> | |||
|  |         ///  获取附件路径 | |||
|  |         /// </summary> | |||
|  |         /// <returns></returns> | |||
|  |         public static string getFileUrl(string menuId, string tokeyId, string url) | |||
|  |         { | |||
|  |             string fileUrl = url; | |||
|  |             using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) | |||
|  |             { | |||
|  |                 if (!string.IsNullOrEmpty(tokeyId)) | |||
|  |                 { | |||
|  |                     var getAtt = db.AttachFile.FirstOrDefault(x =>x.MenuId== menuId &&  x.ToKeyId == tokeyId); | |||
|  |                     if (getAtt != null && !string.IsNullOrEmpty(getAtt.AttachUrl)) | |||
|  |                     { | |||
|  |                         fileUrl = getAtt.AttachUrl; | |||
|  |                     } | |||
|  |                 } | |||
|  | 
 | |||
|  |                 if (!string.IsNullOrEmpty(fileUrl)) | |||
|  |                 { | |||
|  |                     fileUrl = fileUrl.Replace('\\', '/'); | |||
|  |                 } | |||
|  |             } | |||
|  |             return fileUrl; | |||
|  |         } | |||
|  |     } | |||
|  | } |