205 lines
9.0 KiB
C#
205 lines
9.0 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Web;
|
|
using Newtonsoft.Json.Linq;
|
|
using HZQR.Common;
|
|
|
|
namespace FileTransmission
|
|
{
|
|
/// <summary>
|
|
/// FileUpload 的摘要说明
|
|
/// </summary>
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
} |