public async Task <IActionResult> UploadScreenshot([FromServices] ContextString dbContext) { QianMuResult _Result = new QianMuResult(); QMLog qm = new QMLog(); try { System.Text.ASCIIEncoding ASCII = new System.Text.ASCIIEncoding(); int _LenDec = 6; //长度说明占位长度 int _JsonLen = 0; //长度 int _HeadLen = 0; //头部长度 JsonModel jmodel = new JsonModel(); //声明字符数据,将获取到的流信息读到字符数组中 byte[] byteArray = new byte[HttpContext.Request.ContentLength.Value]; using (Stream stream = HttpContext.Request.Body) { int readCount = 0; // 已经成功读取的字节的个数 while (readCount < HttpContext.Request.ContentLength.Value) { readCount += stream.Read(byteArray, readCount, (int)HttpContext.Request.ContentLength.Value - readCount); } } //读取Json长度 string jsonLength = ASCII.GetString(byteArray, 0, _LenDec); _JsonLen = int.Parse(jsonLength.TrimStart('0')); _HeadLen = _LenDec + _JsonLen; //读取json信息 string inputStr = ASCII.GetString(byteArray, _LenDec, _JsonLen); jmodel = (JsonModel)Newtonsoft.Json.JsonConvert.DeserializeObject(inputStr, jmodel.GetType()); string code = jmodel.Code; string filename = jmodel.FileName; //检测用户输入格式 if (String.IsNullOrEmpty(code)) { _Result.Code = "510"; _Result.Msg = "编码不可为空"; _Result.Data = ""; return(Json(_Result)); } //IPAddress ipaddress; //if (!IPAddress.TryParse(ip, out ipaddress)) //{ // _Result.Code = "510"; // _Result.Msg = "IP不合法"; // _Result.Data = ""; // return Json(_Result); //} int count = dbContext.Device.Where(i => i.Code == code).Count(); if (count <= 0) { _Result.Code = "1"; _Result.Msg = "未找到编码为:" + code + "的设备"; _Result.Data = ""; return(Json(_Result)); } AssetFile assetfile = new AssetFile(); //文件名 var GUID = Guid.NewGuid(); long filesize = HttpContext.Request.ContentLength.Value - _HeadLen; //文件类型 var ext = filename.Split('.').Last(); FileTypeJudgment ftj = new FileTypeJudgment() { TypeTarget = new TypeImg() }; //if (Method.ImgType.Contains(ext)) //{ // //图片文件 // assetfile.FileType = "图片"; //} if (ftj.Judge(ext)) { //图片文件 assetfile.FileType = "图片"; } else { _Result.Code = "510"; _Result.Msg = "不是合法的文件类型"; _Result.Data = ""; return(Json(_Result)); } //文件保存路径 var _FolderPath = @"\Files" + @"\" + GUID; string path = Method._hostingEnvironment.WebRootPath + _FolderPath; if (Directory.Exists(path) == false)//如果不存在就创建file文件夹 { Directory.CreateDirectory(path); } //文件全路径 var filepath = Method._hostingEnvironment.WebRootPath + _FolderPath + @"\" + filename; using (FileStream fs = System.IO.File.Create(filepath)) { fs.Write(byteArray, _HeadLen, byteArray.Length - _HeadLen); fs.Flush(); fs.Dispose(); } #region 文件上传到OSS服务器并删除本地存档 var prjinfo = dbContext.ProjectInfo.FirstOrDefault(); FileStream fileFacestream = new FileStream(filepath, FileMode.Open); byte[] btFace = new byte[fileFacestream.Length]; //调用read读取方法 fileFacestream.Read(btFace, 0, btFace.Length); fileFacestream.Close(); string faceImg = Convert.ToBase64String(btFace); qm.WriteLogToFile("截图", "准备上传"); var filedata = new { FileName = filename, FileStr = faceImg, MallCode = prjinfo.CusID }; var param = JsonHelper.SerializeJSON(filedata); var _r = Method.PostMoths(Method.FileServer + "/FileManage/UpLoadScreenshotFiles", param); qm.WriteLogToFile("截图", _r); QianMuResult qianMuResult = new QianMuResult(); qianMuResult = (QianMuResult)Newtonsoft.Json.JsonConvert.DeserializeObject(_r, qianMuResult.GetType()); if (qianMuResult.Code != "200") { _Result.Code = "2"; _Result.Msg = "上传文件到OSS失败"; _Result.Data = ""; return(Json(_Result)); } // MemoryStream majorfs = new MemoryStream(); // majorfs.Write(byteArray, _HeadLen, byteArray.Length - _HeadLen); //// file.CopyTo(majorfs); //var majorfs = FileHelper.FileToStream(filepath); //AliyunOSS aliyunOSS = new AliyunOSS(); //if (!aliyunOSS.UploadFileToOSS("Files" + "/" + assetfile.Code + "/" + assetfile.FileName + "." + assetfile.FileExtName, majorfs)) //{ // _Result.Code = "2"; // _Result.Msg = "上传文件到OSS失败"; // _Result.Data = ""; // return Json(_Result); //} #endregion //添加文件到数据库 assetfile.AddTime = DateTime.Now; assetfile.FileExtName = ext; //assetfile.Code = GUID.ToString(); assetfile.Code = qianMuResult.Data.ToString(); assetfile.FileHash = ""; assetfile.FileName = filename.Split('.').First(); //assetfile.FilePath = @"\Files" + @"\" + GUID.ToString() + @"\" + filename; assetfile.FilePath = @"\Files" + @"\" + qianMuResult.Data.ToString() + @"\" + filename; assetfile.FileSize = filesize; dbContext.AssetFiles.Add(assetfile); //更新截图信息到设备 var dev = await dbContext.Device.Where(i => i.Code == code).FirstOrDefaultAsync(); dev.ScreenshotSrc = assetfile.FilePath; if (dbContext.SaveChanges() > 0) { Output_FileInfo of = new Output_FileInfo(); of.FilePath = assetfile.FilePath; // of.ID = assetfile.ID; of.Code = assetfile.Code; _Result.Code = "200"; _Result.Msg = "文件已被上传完成,并加入数据库"; _Result.Data = of; } else { _Result.Code = "2"; _Result.Msg = "添加文件到数据库失败"; _Result.Data = ""; } } catch (Exception e) { qm.WriteLogToFile("", e.ToString()); _Result.Code = "500"; _Result.Msg = "程序运行错误"; _Result.Data = ""; } return(Json(_Result)); }
public static QianMuResult PostMothsToObj(string url, string param) { QianMuResult _Result = new QianMuResult(); string strURL = url; System.Net.HttpWebRequest request; request = (System.Net.HttpWebRequest)WebRequest.Create(strURL); request.Method = "POST"; request.ContentType = "application/json;charset=UTF-8"; string paraUrlCoded = param; byte[] payload; payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded); request.ContentLength = payload.Length; Stream writer = request.GetRequestStream(); writer.Write(payload, 0, payload.Length); writer.Close(); System.Net.HttpWebResponse response; response = (System.Net.HttpWebResponse)request.GetResponse(); System.IO.Stream s; s = response.GetResponseStream(); string StrDate = ""; string strValue = ""; StreamReader Reader = new StreamReader(s, Encoding.UTF8); while ((StrDate = Reader.ReadLine()) != null) { strValue += StrDate; // strValue += StrDate + "\r\n"; } var _r = (QianMuResult)Newtonsoft.Json.JsonConvert.DeserializeObject(strValue, _Result.GetType()); return(_r); }