using System; using System.IO; using System.Web; using Newtonsoft.Json.Linq; using HZQR.Common; namespace FileTransmission { /// /// FileUpload 的摘要说明 /// public class FileUpload : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.HeaderEncoding = System.Text.Encoding.UTF8; context.Response.ContentType = "text/plain"; context.Response.Charset = "utf-8"; JObject keyValuePairs = new JObject(); try { //文件名称 string fileName = context.Server.UrlDecode(context.Request.Headers["FileName"].ToString()); //存储路径 string fileDir = context.Server.UrlDecode(context.Request.Headers["FileDir"].ToString()); //目标文件名称 string DestFileName = context.Request.Headers["DestFileName"] == null ? "" : context.Server.UrlDecode(context.Request.Headers["DestFileName"].ToString()); //目标路径 string DestDir = context.Request.Headers["DestDir"] == null ? "" : context.Server.UrlDecode(context.Request.Headers["DestDir"].ToString()); //判断路径地址是不是绝对路径,不是则根据相对路径进行转化 if (!Path.IsPathRooted(fileDir)) { fileDir = HttpContext.Current.Server.MapPath(fileDir); } //判断是否是删除文件 if (context.Request.Headers["FileDelete"].TryParseToInt() == 1) { //判断路径地址是不是绝对路径,不是则根据相对路径进行转化 if (!Path.IsPathRooted(fileDir)) { fileDir = HttpContext.Current.Server.MapPath(fileDir); } //创建文件夹 if (Directory.Exists(fileDir)) { if (File.Exists(fileDir + "\\" + fileName)) { //删除文件 File.Delete(fileDir + "\\" + fileName); LogUtil.WriteLog(null, "已删除文件:" + fileDir + "\\" + fileName, DateTime.Now.ToString("yyyyMMdd") + "_DeleteFile"); } if (Directory.GetFiles(fileDir).Length == 0) { //删除文件夹 Directory.Delete(fileDir); LogUtil.WriteLog(null, "已删除文件夹:" + fileDir, DateTime.Now.ToString("yyyyMMdd") + "_DeleteFile"); } } keyValuePairs["Result_Code"] = 100; keyValuePairs["Result_Desc"] = "删除完成"; } else if (context.Request.Headers["DirMove"].TryParseToInt() == 1) { string destFileAbsUrl = DestDir + "\\" + (string.IsNullOrWhiteSpace(DestFileName) ? fileName : DestFileName); //文件是否存在 if (Directory.Exists(DestDir + "\\" + DestFileName) || File.Exists(DestDir + "\\" + DestFileName)) { //覆盖文件 if (context.Request.Headers["coverDir"].TryParseToInt() == 1) { //目标路径文件夹不存在,则先新建文件夹 if (!Directory.Exists(DestDir)) { Directory.CreateDirectory(DestDir); } if (!string.IsNullOrWhiteSpace(fileName))//移动文件 { //目标路径已存在文件,则先删除文件,然后再迁移 if (File.Exists(destFileAbsUrl)) { File.Delete(destFileAbsUrl); } File.Move(fileDir + "\\" + fileName, destFileAbsUrl); LogUtil.WriteLog(null, "移动文件:" + fileDir + "\\" + fileName + "至" + destFileAbsUrl, DateTime.Now.ToString("yyyyMMdd") + "_MoveDirectory"); keyValuePairs["Result_Code"] = 100; keyValuePairs["Result_Desc"] = "移动成功!"; } foreach (FileInfo fileInfo in new DirectoryInfo(fileDir).GetFiles()) { //目标路径已存在文件,则先删除文件,然后再迁移 if (File.Exists(DestDir + "\\" + fileInfo.Name)) { File.Delete(DestDir + "\\" + fileInfo.Name); } File.Move(fileInfo.FullName, DestDir + "\\" + fileInfo.Name); LogUtil.WriteLog(null, "移动文件:" + fileDir + "\\" + fileName + "至" + destFileAbsUrl, DateTime.Now.ToString("yyyyMMdd") + "_MoveDirectory"); } keyValuePairs["Result_Code"] = 100; keyValuePairs["Result_Desc"] = "移动成功!"; } else { if (!string.IsNullOrWhiteSpace(fileName)) { if (File.Exists(destFileAbsUrl)) { keyValuePairs["Result_Code"] = 200; keyValuePairs["Result_Desc"] = DestDir + "文件已存在是否覆盖"; } else { File.Move(fileDir + "\\" + fileName, destFileAbsUrl); keyValuePairs["Result_Code"] = 100; keyValuePairs["Result_Desc"] = "移动成功!"; } } //文件已经存在返回提示 keyValuePairs["Result_Code"] = 200; keyValuePairs["Result_Desc"] = DestDir + "文件已存在是否覆盖"; } } else { //如果移动的是文件,则直接迁移过去 if (!string.IsNullOrEmpty(fileName)) { //目标路径文件夹不存在,则先新建文件夹 if (!Directory.Exists(DestDir)) { Directory.CreateDirectory(DestDir); } File.Move(fileDir + "\\" + fileName, destFileAbsUrl); } else { //把新文件移动到目标目录下 Directory.Move(fileDir, DestDir); } keyValuePairs["Result_Code"] = 100; keyValuePairs["Result_Desc"] = "移动成功!"; } } else { //文件大小 int fileSize = int.Parse(context.Request.Headers["FileSize"].ToString()); //申明二进制文件流 byte[] bytes = context.Request.BinaryRead(fileSize); //创建文件夹 if (!Directory.Exists(fileDir)) { Directory.CreateDirectory(fileDir); } //生成文件 File.WriteAllBytes($"{fileDir}\\{fileName}", bytes); keyValuePairs["Result_Code"] = 100; keyValuePairs["Result_Desc"] = "上传成功"; } } catch (Exception ex) { keyValuePairs["Result_Code"] = 999; keyValuePairs["Result_Desc"] = "传输失败!" + ex.Message; LogUtil.WriteLog(ex, "", DateTime.Now.ToString("yyyyMMdd") + "_ErrorLog"); } finally { context.Response.Write(keyValuePairs.ToString()); context.Response.End(); } } public bool IsReusable { get { return false; } } } }