You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

115 lines
4.0 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
namespace Web
{
public class FileUpload
{
private HttpContextBase context = null;
public string Type { get; set; }
public string UploadPath { get; set; }
public int MaxLength { get; set; }
public string PostName { get; private set; }
public string SaveName { get; private set; }
public int FileLength { get; private set; }
public string ExtName { get; private set; }
public string SavePath { get; private set; }
//private static readonly string _uploadPath = "~/upload/";
//public static string UploadPath { get { return _uploadPath; } }
public FileUpload(HttpContextBase httpContext)
: this()
{
context = httpContext;
}
public FileUpload()
{
Type = "txt|rar|zip|jpg|jpeg|png|gif|bmp";
PostName = string.Empty;
SaveName = string.Empty;
FileLength = 0;
UploadPath = string.Empty;
MaxLength = 200;
ExtName = string.Empty;
if (context == null)
context = new HttpContextWrapper(HttpContext.Current);
}
public FileUpload(string type)
{
Type = type;
PostName = string.Empty;
SaveName = string.Empty;
FileLength = 0;
UploadPath = string.Empty;
MaxLength = 5*1024;
ExtName = string.Empty;
if (context == null)
context = new HttpContextWrapper(HttpContext.Current);
}
private string CreateForderName()
{
return DateTime.Now.ToString("yyyyMM");
}
private string CreateFileName()
{
//return DateTime.Now.ToString("yyyyMMssHHmmss");
return String.Format("{0:yyyyMMssHHmmss}.{1}", DateTime.Now, ExtName);
}
public void Save()
{
HttpPostedFileBase upfile = context.Request.Files[0];
PostFile file = new PostFile(upfile);
Save(file);
}
public void Save(PostFile postFile)
{
if (string.IsNullOrEmpty(Type))
throw new ArgumentNullException("Type");
if (string.IsNullOrEmpty(UploadPath))
throw new ArgumentNullException("UploadPath");
if (MaxLength < 0)
throw new ArgumentOutOfRangeException("ManLength");
PostName = postFile.Name.Substring(postFile.Name.LastIndexOf('\\') + 1);
string extName = PostName.Substring(PostName.LastIndexOf('.') + 1);
if (string.IsNullOrEmpty(extName))
throw new Exception("无扩展名信息,该文件不被支持.");
else
{
extName = extName.ToLower();
string[] fs = Type.Split('|');
if (!fs.Any(f => f == extName))
throw new Exception(string.Format("扩展名{0}不被系统支持,请重新上传.", extName));
ExtName = extName;
}
FileLength = postFile.Buffer.Length;
if (FileLength > MaxLength * 1024)
throw new Exception(string.Format("上传文件过大,系统限制为{0}KB,请重写上传.", MaxLength));
string rootPath = context.Server.MapPath(UploadPath);
if (!Directory.Exists(rootPath))
throw new Exception("系统错误:不存在该上传路径:" + UploadPath);
SavePath = CreateForderName();
//string savePath = rootPath + '\\' + SavePath;
string savePath = Path.Combine(rootPath, SavePath);
if (!Directory.Exists(savePath))
Directory.CreateDirectory(savePath);
SaveName = CreateFileName();
//postFile.SaveAs(savePath + "\\" + SaveName);
postFile.SaveAs(Path.Combine(savePath, SaveName));
}
}
}