using Lskj.Model; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Web; namespace Lskj.Util { public static class UploadFileUtil { /// /// 登录获取token /// /// /// public static string Login(string oaUrl) { string token = ""; try { string loginUrl = $"{oaUrl}/Api/SysUserAjaxApi.ashx"; HttpHelper.Setting("application/x-www-form-urlencoded", null, null, HttpHelper.Encode.UTF8); Dictionary loginPmsDic = new Dictionary(); loginPmsDic.Add("method", "Login"); loginPmsDic.Add("username", HttpUtility.UrlEncode(ERPInfo.Instance.UserName)); loginPmsDic.Add("password", HttpUtility.UrlEncode(ERPInfo.Instance.InPassWord)); HttpWebResponse loginResponse = HttpHelper.Post(loginUrl, "", loginPmsDic, null, out string loginResult); if (loginResponse != null && !string.IsNullOrEmpty(loginResult)) { JObject jObject = JsonConvert.DeserializeObject(loginResult); if (jObject.ContainsKey("success")) { if ((jObject["success"] + "").Equals("True")) { if (jObject.ContainsKey("token")) { token = jObject["token"] + ""; } } } } } catch (Exception ex) { Console.WriteLine(ex.Message); } return token; } /// /// 上传文件 /// /// /// /// /// /// /// public static bool UploadFile(string token, string url, string fileStream, out string fileId, out string returnMsg) { bool isUpload = false; fileId = "-1"; returnMsg = ""; if (!string.IsNullOrEmpty(token)) { HttpHelper.Setting("application/x-www-form-urlencoded", null, null); string result = ""; Dictionary headerDic = new Dictionary(); headerDic.Add("Authorization", $"Bearer {token}"); HttpWebResponse webResponse = HttpHelper.Post(url, fileStream, null, headerDic, out result); if (webResponse != null && !string.IsNullOrEmpty(result)) { JObject jsonObject = (JObject)JsonConvert.DeserializeObject(result); string isSuccess = jsonObject["success"] + ""; if (isSuccess.Equals("True", StringComparison.CurrentCultureIgnoreCase)) { if (jsonObject.ContainsKey("other")) { fileId = jsonObject["other"] + ""; } isUpload = true; } else { if (jsonObject.ContainsKey("msg")) { returnMsg = jsonObject["msg"] + ""; } isUpload = false; } } else { returnMsg = "上传请求失败"; isUpload = false; } } else { returnMsg = "登录失败"; isUpload = false; } return isUpload; } public static bool UploadFile(string token, string postUrl, string filePath, string moduleCode, string idValue, string speciesno, out string fileId, out string rtnMsg) { bool isUpload = false; fileId = ""; rtnMsg = ""; try { FileInfo fileInfo = new FileInfo(filePath); int pageSize = 1 * 1024 * 1024; long totalSize = fileInfo.Length; long position = 0; int comfirm = 0; int encode = 4; int failNum = 0; bool hasFail = false; string uploadToken = Guid.NewGuid().ToString("N").Substring(0, 24); string uploadFileName = Path.GetFileName(filePath); // 如果你后台没有 DoWebUploadSafe,就改回 DoWebUpload string uploadMethod = "DoWebUpload"; Dictionary headerDic = new Dictionary(); headerDic.Add("Authorization", "Bearer " + token); using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { while (position < totalSize) { int readSize = (int)Math.Min(pageSize, totalSize - position); byte[] buffer = new byte[readSize]; int realRead = fs.Read(buffer, 0, readSize); if (realRead <= 0) { break; } if (realRead != readSize) { byte[] tempBytes = new byte[realRead]; Array.Copy(buffer, tempBytes, realRead); buffer = tempBytes; readSize = realRead; } long tsp = GetUnixTime(); string uploadUrl = string.Format( postUrl, moduleCode, HttpUtility.UrlEncode(idValue), "file", totalSize, position, HttpUtility.UrlEncode(uploadFileName), uploadMethod, HttpUtility.UrlEncode(speciesno), comfirm, encode, uploadToken, tsp ); string result = ""; HttpWebResponse webResponse = HttpHelper.PostFileChunk(uploadUrl, buffer, uploadFileName, headerDic, out result); if (webResponse != null && !string.IsNullOrEmpty(result)) { JObject jsonObject = (JObject)JsonConvert.DeserializeObject(result); string isSuccess = jsonObject["success"] + ""; if (isSuccess.Equals("True", StringComparison.CurrentCultureIgnoreCase)) { failNum = 0; if (jsonObject.ContainsKey("data") && jsonObject["data"] != null && jsonObject["data"].Type == JTokenType.Object) { JObject dataObject = (JObject)jsonObject["data"]; if (dataObject.ContainsKey("FileName")) { uploadFileName = dataObject["FileName"] + ""; } } if (jsonObject.ContainsKey("other")) { fileId = jsonObject["other"] + ""; } position += readSize; } else { string dataCode = jsonObject.ContainsKey("data") ? jsonObject["data"] + "" : ""; if (dataCode.Equals("9") && comfirm == 0) { comfirm = 1; fs.Position = position; continue; } if (jsonObject.ContainsKey("msg")) { rtnMsg = jsonObject["msg"] + ""; } failNum++; if (failNum < 2 && rtnMsg.IndexOf("权限") < 0 && rtnMsg.IndexOf("禁止") < 0) { fs.Position = position; continue; } hasFail = true; break; } } else { rtnMsg = "上传请求失败," + result; hasFail = true; break; } } } if (!hasFail && position >= totalSize) { isUpload = true; } } catch (Exception ex) { rtnMsg = ex.Message; isUpload = false; } return isUpload; } private static long GetUnixTime() { DateTime startTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); return (long)(DateTime.UtcNow - startTime).TotalSeconds; } /// /// 上传文件 /// /// /// /// /// public static bool DeleteFile(string token, string url, out string returnMsg) { bool isDelete = false; returnMsg = ""; if (!string.IsNullOrEmpty(token)) { HttpHelper.Setting("application/x-www-form-urlencoded", null, null); Dictionary headerDic = new Dictionary(); headerDic.Add("Authorization", $"Bearer {token}"); HttpWebResponse webResponse = HttpHelper.Post(url, "", null, headerDic, out string result); if (webResponse != null && !string.IsNullOrEmpty(result)) { JObject jsonObject = (JObject)JsonConvert.DeserializeObject(result); string isSuccess = jsonObject["success"] + ""; if (isSuccess.Equals("True", StringComparison.CurrentCultureIgnoreCase)) { isDelete = true; } else { if (jsonObject.ContainsKey("msg")) { returnMsg = jsonObject["msg"] + ""; } isDelete = false; } } else { returnMsg = "删除请求失败"; isDelete = false; } } else { returnMsg = "登录失败"; isDelete = false; } return isDelete; } /// /// 文件转换为byte[] /// /// /// public static byte[] ConvertFileToBytes(string filePath) { byte[] bytContent = null; FileStream fs = null; BinaryReader br = null; try { fs = new FileStream(filePath, System.IO.FileMode.Open); } catch (Exception) { throw; } finally { if (fs != null) br = new BinaryReader((Stream)fs); if (br != null) bytContent = br.ReadBytes((Int32)fs.Length); if (fs != null) fs.Dispose(); } return bytContent; } } }