public partial class Upload : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
try
{
Response.Charset = "UTF-8";
Response.Write(upLoadFile("filedata")); //文件名传参。有返回值JSON格式用于提示客户
}
catch
{
}
}
/// <summary>
/// 上传文件
/// </summary>
string upLoadFile(string inputname)
{
string immediate;
string attachdir;
int dirtype;
int maxattachsize;
string upext;
int msgtype;
immediate = Request.QueryString["immediate"];//立即模式
attachdir = "upload"; // 上传文件保存路径,结尾不要带/ UPLOAD 文件夹 用于在服务器上存储用户上传的文件夹
dirtype = 1; // 1:按天存入目录 2:按月存入目录 3:按扩展名存目录 建议使用按天存 目录生成的每天一个文件夹
maxattachsize = 2097152; // 最大上传大小,默认是2M 文件大小限制
upext = "txt,rar,zip,jpg,jpeg,gif,png,swf,wmv,avi,wma,mp3,mid,doc,xls,ppt"; // 上传扩展名 EXT文件后缀名称 对应
msgtype = 2; //返回上传参数的格式:1,只返回url,2,返回参数数组
string err, msg;
err = "";
msg = "''";
HttpFileCollection filecollection = Request.Files; //所有上载文件的访问提供
// 只接收指定文件域的上传,如果需要同时接收多个文件,请通过循环方式接收
HttpPostedFile postedfile = filecollection.Get(inputname); //单个上载文件的访问提供
if (postedfile == null)
{
err = "无数据提交";
}
else
{
if (postedfile.ContentLength > maxattachsize)
{
err = "文件大小超过" + maxattachsize + "字节";
}
else
{
string attach_dir, attach_subdir, filename, extension, target;
// 取上载文件后缀名
extension = GetFileExt(postedfile.FileName);
if (("," + upext + ",").IndexOf("," + extension + ",") < 0)//如果在所有允许后缀名成中 找到上传文件名称 的位置 <0,则证明 不包含上传后缀名文件
{
err = "上传文件扩展名必需为:" + upext;
}
else
{
switch (dirtype)
{
case 2://按月存放
attach_subdir = "month_" + DateTime.Now.ToString("yyMM");
break;
case 3://按扩展名存放
attach_subdir = "ext_" + extension;
break;
default://按日存放
attach_subdir = "day_" + DateTime.Now.ToString("yyMMdd"); //格式 day_20110518
break;
}
attach_dir = attachdir + "/" + attach_subdir + "/"; // “Upload /day_20110518” 路径格式拼接,先定义总的文件路径,在拼接按日存放中每天所属文件夹
// 生成随机文件名
Random random = new Random(DateTime.Now.Millisecond); //文件名成为 随机的年月日小时分毫秒 构成
filename = DateTime.Now.ToString("yyyyMMddhhmmss") + random.Next(10000) + "." + extension; //年月日时分秒+反回一个小于指定值的最大随机数+文件名后缀 拼接文件名称
target = attach_dir + filename; //拼接 文件路径+文件名称 文件所有路径信息得出
try
{
string rootPath = Request.ApplicationPath; //得到项目根目录
if (rootPath.Substring(rootPath.Length - 1) != "/")
{
rootPath += "/";
}
CreateFolder(Server.MapPath(rootPath + attach_dir));//存入根目录下文件夹 创建文件夹
postedfile.SaveAs(Server.MapPath(rootPath + target));//存入根目录下文件夹 存文件到指定位置
}
catch (Exception ex)
{
err = ex.Message.ToString(); //格式不正确
}
// 立即模式判断
if (immediate == "1") target = "!" + target;
target = jsonString(target);
if (msgtype == 1)
{
msg = "'" + target + "'";
}
else
{ //id是用户上传的文件名
//localname是上传以后在服务器端的文件路径/文件名
msg = "{url:'../../" + target + "',hostname:'../../" + target + "',filename:'" + GetFileName(postedfile.FileName) + "'}";
}
}
}
}
postedfile = null;
filecollection = null;
return "{err:'" + jsonString(err) + "',msg:" + msg + "}";
}
/// <summary>
/// 把返回的数据转化成json格式
/// </summary>
string jsonString(string str)
{
str = str.Replace("\\", "\\\\");
str = str.Replace("/", "\\/");
str = str.Replace("'", "\\'");
return str;
}
/// <summary>
/// 获取文件扩展名
/// </summary>
/// <param name="FullPath">完整路径</param>
/// <returns></returns>
string GetFileExt(string FullPath)
{
if (FullPath != "")
{
return FullPath.Substring(FullPath.LastIndexOf('.') + 1).ToLower(); //最后一个‘.’之后的第一个位置开始截取 是 后缀名称
}
else
{
return "";
}
}
/// <summary>
/// 获取文件名
/// </summary>
/// <param name="FullPath">完整路径</param>
/// <returns></returns>
string GetFileName(string FullPath)
{
if (FullPath != "")
{
return FullPath.Substring(FullPath.LastIndexOf('\\') + 1).ToLower();
}
else
{
return "";
}
}
/// <summary>
/// 创建文件夹
/// </summary>
void CreateFolder(string FolderPath)
{
if (!System.IO.Directory.Exists(FolderPath))
{
System.IO.Directory.CreateDirectory(FolderPath);
}
}
}