|
首先感谢http://www.iyunv.com/name-lh/archive/2007/04/28/731528.html
name-lh提供的封装完整的FTP类
FTP用户名密码这些信息以及上传文件夹名称这些信息可以从website里面的config文件夹里面对应的文件设置。
引用了jquery,主要是为了引用多文件上传辅助插件:jquery.MultiFile
目前最新版本是:jquery.MultiFile-1.47.pack.js
上传后返回上传文件信息,以JSON格式数据返回,方便前台js调用
{"uploadinfo":[{"error":"","success":"20100512171211299064.jpg上传成 功!","fileinfo":{"fullpath":"Upload\/Blogs\/201007 \/20100729271249977046.jpg","filename":"20100729271249977046.jpg","fileextname":".jpg","filelength":"548KB","savepath":"Upload \/Blogs\/201007\//","id":"0"}}, {"error":"","success":"20100513301152672947.jpg上传成功!","fileinfo": {"fullpath":"Upload\/Blogs\/201007 \/20100729271249249466.jpg","filename":"20100729271249249466.jpg","fileextname":".jpg","filelength":"759KB","savepath":"Upload \/Blogs\/201007\//","id":"1"}}, {"error":"","success":"20100519281023870058.jpg上传成功!","fileinfo": {"fullpath":"Upload\/Blogs\/201007 \/20100729271249827587.jpg","filename":"20100729271249827587.jpg","fileextname":".jpg","filelength":"858KB","savepath":"Upload \/Blogs\/201007\//","id":"2"}}],"errorext":"每次最多只能上传3个文 件!","total":"5","successnum":"3"}
这是上传后返回的信息例子,error表示该文件上传中的出错信息,success表示上传成功信息(其中的文件名是文件上传前的原文件名)。fileinfo表示上传的文件的详细信息,其中fullpath表示上传文件的路径(包含文件名) ,filename表示上传的文件的新文件名。fileextname表示上传文件的扩展名。filelength表示文件大小,savapath表示文件的路径(不包含文件名),id表示第几个上传的文件(从0开始),errorext表示所有文件上传中的错误信息(主要是指是否超过指定的上传文件数),total表示总共上传几个文件,successnum表示成功上传了几个文件。
上传核心函数:
上传核心函数
///
/// 上传文件
///
/// _num=1,表示修改文件名 0不修改文件名
/// 上传到不同类型的目录,如博客,新闻,图片,论坛
///
public string Upload(int _num , UploadType type)
{
switch (type)
{
case UploadType.News:
SetFilePath(NewsRoot);
break;
case UploadType.Blog:
SetFilePath(BlogsRoot);
break;
case UploadType.Forum:
SetFilePath(ForumRoot);
break;
case UploadType.Photo:
SetFilePath(PhotoRoot);
break;
default:
break;
}
byte[] file; //// 统一转换为byte数组处理
string resutl = string.Empty; ////返回值
StringBuilder uploadmsg = new StringBuilder(); ////保存上传信息
uploadmsg.Append("{\"uploadinfo\":[");
string errorext = string.Empty; ////保存错误信息扩展
int successnum = 0; ////保存上传成功的个数
for (int i = 0; i < filecollection.Count; i++)
{
string error = string.Empty; ////保存错误信息
string message = string.Empty; ////保存上传信息
string success = string.Empty; ////保存正确信息
string filemsg = string.Empty; ////保存文件信息
if (filenumbers != 0 && i > filenumbers)
{
errorext = "每次最多只能上传" + (filenumbers + 1) + "个文件!";
}
else
{
HttpPostedFile postedfile = filecollection;
file = new Byte[postedfile.ContentLength]; //// 初始化byte长度.
// 转换为byte类型
System.IO.Stream stream = postedfile.InputStream;
stream.Read(file, 0, postedfile.ContentLength);
stream.Close();
if (file.Length != 0)
{
// Extension = "jpg";
string fileName = PathToName(postedfile.FileName); ////获取所上传文件名称(原始文件名)
string extname = Utils.GetPostfixStr(fileName);
uploadedextname = extname; ////上传后的扩展名
if (extname.Length == 0)
{
error = "你未设置上传文件类型,系统不允许进行下一步操作!";
}
else
{
if (("," + extension + ",").IndexOf("," + extname + ",") < 0)
{
error = "只允许上传" + extension + " 文件!";
}
else
{
if (file.Length > maxfilelength)
{
error = "上传文件限制大小:" + FileLength / 1024 + "kb!";
}
else
{
filelength = file.Length;
if (_num == 1)
{
string _Randstr = Rand.Number(6);
string _tmps = string.Empty; //// DateTime.Now.Month + DateTime.Now.Day + "-" + _Randstr + "-" + fileName;
_tmps = string.Concat(new object[] { DateTime.Now.ToString("yyyyMMddmmhhss"), _Randstr, extname }); ////上传后已更改的新文件名
uploadedfilename = _tmps;
}
else
{
uploadedfilename = fileName;
}
fullpath = savePath + uploadedfilename;
try
{
System.IO.FileStream fs = new System.IO.FileStream(Utils.MapPath(fullpath), System.IO.FileMode.Create, System.IO.FileAccess.Write);
fs.Write(file, 0, file.Length);
fs.Flush();
fs.Close();
success = fileName + "上传成功!";
successnum = successnum + 1;
}
catch (Exception ex)
{
Utils.savePublicLogFiles("文件上传", ex.Message, "");
error = fileName + "上传失败!";
}
}
}
}
}
else
{
error = "尚未选择要上传的文件";
}
}
if (string.IsNullOrEmpty(errorext))
{
filemsg = "\"fileinfo\":{\"fullpath\":\"" + Utils.JsonCharFilter(fullpath) + "\",\"filename\":\"" + Utils.JsonCharFilter(uploadedfilename) + "\",\"fileextname\":\"" + Utils.JsonCharFilter(uploadedextname) + "\",\"filelength\":\"" + filelength / 1024 + "KB\",\"savepath\":\"" + Utils.JsonCharFilter(savePath) + "/\",\"id\":\"" + i + "\"}";
message = "{\"error\":\"" + Utils.JsonCharFilter(error) + "\",\"success\":\"" + Utils.JsonCharFilter(success) + "\"," + filemsg + "}";
uploadmsg.Append(message);
uploadmsg.Append(",");
}
}
resutl = Utils.DelLastComma(uploadmsg.ToString().Trim());
resutl = resutl + "],\"errorext\":\"" + Utils.JsonCharFilter(errorext) + "\"" + ",\"total\":\"" + filecollection.Count + "\",\"successnum\":\"" + successnum + "\"}";
uploadmsg = null;
filecollection = null;
return resutl;
}
废话不多说了,源代码附在后面,有什么问题欢迎您联系我。
程序源码,点此下载
|
|