主题: 发一个Asp.Net的上传图片类
作者: Zxxk, 发布日期: 2009-06-05 16:55:36, 浏览数: 7487

代码如下:

public partial class ImageUpload : System.Web.UI.Page
{
/// <summary>
/// 允许上传大小(单位KB)
/// </summary>
int UploadImageSize = 2048;
/// <summary>
/// 允许上传文件类型(带[.]的扩展名)
/// </summary>
string UploadImageExts = ".jpg|.jpeg|.gif|.bmp|.png";
/// <summary>
/// 上传目录(绝对虚拟目录,以[/]开头,以[/]结尾)
/// </summary>
string UploadImageDir = "/UpImages/";


protected void Page_Load(object sender, EventArgs e)
{

if (!IsPostBack)
{
doUploadImagePost();
}
}

protected void doUploadImagePost()
{
HttpPostedFile PostedFile = Request.Files["imgFile"];
if (PostedFile == null)
{
ReturnFalse("上传文件元素不存在!");
return;
}
long FileLength = PostedFile.ContentLength;
string FileName = PostedFile.FileName;
//判断文件是否大于0字节或文件名是否为空
if (FileLength <= 0 || string.IsNullOrEmpty(FileName))
{
ReturnFalse("未选择需要上传文件!");
return;
}
if (FileName.IndexOf(".") < 0)
{
ReturnFalse("上传文件为未知文件!");
return;
}
string FileExtension = FileName.Substring(FileName.LastIndexOf(".")).ToLower();

//判断是否是允许上传的文件类型
if (TrueFileExtension(FileExtension) == false)
{
ReturnFalse("不允许上传的文件类型,只允许上传以下类型文件:\\n[" + UploadImageExts.Replace("|", ", ") + "]!");
return;
}
long MaxFileLength = UploadImageSize * 1024;
//判断是否在允许上传的大小之内
if (FileLength > MaxFileLength)
{
ReturnFalse("上传文件大小超过最大限制(" + MaxFileLength.ToString() + "K)!");
return;
}


string NewFilePath = UploadImageDir + GetSaveFolder() + GetNewFileName() + FileExtension;
//如要保留注原文件名,请注消或删除上面一行,取消下面一行注释
//string NewFilePath = UploadImageDir + GetSaveFolder() + System.IO.Path.GetFileName(FileName);
string FileSaveDir = HttpContext.Current.Server.MapPath(NewFilePath);
try
{
//先判断目录是否存在,不存在创建
if (System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(FileSaveDir)) == false)
{
System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(FileSaveDir));
}
PostedFile.SaveAs(FileSaveDir);
ReturnTrue(NewFilePath);
}
catch
{
//如果出现错误,可能上传目录无写入权限,需检查
ReturnFalse("上传文件保存失败,请重试!\\n如多次重试无效,请与本网管理员联系!");
return;
}

PostedFile = null;
}
/// <summary>
/// 根据时间得到存放目录(以[/]结尾)
/// </summary>
/// <returns>yyyy-MM/</returns>
public string GetSaveFolder()
{
return DateTime.Now.Year.ToString() + "-" + DateTime.Now.Month.ToString() + "/";
//+DateTime.Now.Day.ToString() + "/";
}
/// <summary>
/// 根据时间和随机数得到新文件名(不带扩展名)
/// </summary>
/// <returns>yyyyMMddHHmmssff12345</returns>
public string GetNewFileName()
{
return DateTime.Now.ToString("yyyyMMddHHmmssff") + new Random().Next(10000, 99999).ToString();
}
/// <summary>
/// 判断是否是允许上传的文件类型
/// </summary>
/// <returns>True/False</returns>
public bool TrueFileExtension(string FileExt)
{
string[] TempExtensions = UploadImageExts.ToLower().Split('|');
for (int i = 0; i < TempExtensions.Length; i++)
{
if (TempExtensions[i] == FileExt) return true;
}
return false;
}

protected void ReturnTrue(string imgUrl)
{
OuterHTML("parent.KE.plugin['image'].insert('" + Request.Form["id"] + "','" + imgUrl + "','" + Request.Form["imgTitle"] + "','" + Request.Form["imgWidth"] + "','" + Request.Form["imgHeight"] + "','" + Request.Form["imgBorder"] + "');");
}

protected void ReturnFalse(string Msg)
{
OuterHTML("alert('" + Msg + "');history.back();");
}

protected void OuterHTML(string JScript)
{
Response.Write("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");
Response.Write("<html xmlns=\"http://www.w3.org/1999/xhtml\">");
Response.Write("<head><title>error</title><meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" /></head>");
Response.Write("<body><script type=\"text/javascript\">" + JScript + "</script></body>");
Response.Write("</html>");
}


}

 

使用方法:

1,在editor目录添加一个ImageUpload.aspx的Web 窗体项

2,把ImageUpload.aspx.cs里的public partial class ImageUpload 类的代码替换成上面代码...

3,在ImageUpload.aspx里把HTML代码删除,只保留<%@  %>里面的代码

4,修改plugins/image.html,把里面的action="./../php/Upload.php" 改为 action="./../ImageUpload.aspx"

作者: 暴风雪, 发布日期: 2009-06-08 15:02:31

图片文件名称为中文,会提示 【不允许上传的文件类型,只允许上传以下类型文件:...】bug

回复
作者: Zxxk, 发布日期: 2009-06-10 12:32:35

我使用了几天了,很正常..

注意扩展名,扩展名符合要求才行

回复
作者: 娟娟, 发布日期: 2009-07-07 14:55:41

我用了上面的代码:还是显示不正常:如果:

没报错,但是什么都不显示,这是怎么回事?

回复
作者: 深秋的黎明, 发布日期: 2009-10-04 02:22:10

怎么一直都是提示   “上传文件元素不存在” 呀?

回复
发表新帖 发表回复