这两天将uploadify插件和SWFupload插件进行了整理。我是根据同事在项目中用了,然后整理了下,下次遇到自己也可以用用。
基于jquery的文件上传控件,支持ajax无刷新上传,多个文件同时上传,上传进行进度显示,删除已上传文件。
http://www.uploadify.com/documentation/ 这是插件的一些事件属性,必要时可以查看。插件可以去官网下。我用的3.1版本。版本不同差别很大。
需要的文件:主要的其实也就一个JS文件,一个CSS样式文件。官网是.net版本的我这里是.net的。
<link href="~/Content/Uploadify/v3.1/uploadify1.css" rel="stylesheet" />
<script src="~/Content/Uploadify/jquery-1.4.2.min.js"></script>
<script src="~/Content/Uploadify/v3.1/jquery.uploadify-3.1.js"></script>
主要就是这三个吧。还有一些图片路径什么的这里不细说
样式
<style type="text/css">
#divImg {
width: 100%;
text-align: left;
margin-left: 1%;
}
#divImg img {
border-radius: 5px;
}
.divItem {
float: left;
width: 198px;
height: 112px;
margin: 7px;
}
.ScenicImg {
width: 200px;
height: 112px;
margin: 5px;
}
.delImg {
width: 20px;
height: 20px;
float: left;
position: relative;
top: -116px;
left: 5px;
cursor: pointer;
}
.control-group {
float: left;
width: 50%;
}
</style>
JS代码
<script type="text/javascript">
$(function () {
var uploadLimit = 10;
//InitEidt();//修改的初始化方法
var isFinish = true;//用来验证是否上传完成
$('#uploadify').uploadify({
'buttonText': '上传',
'queueID': "fileQueue",
'buttonClass': 'browser',
'auto': true,//是否为自动上传,true是,false不是
'removeCompleted': false,
'swf': '/Content/Uploadify/v3.1/uploadify.swf',
'uploader': '/Content/Uploadify/UploaddifyHandler.ashx',
'fileTypeExts': '*.png; *.jpg; *.jpeg; *.bmp; *.gif',
'fileDataName': 'Filedata',
'queueSizeLimit': uploadLimit,
'folder': 'upload',
'height': 18,
'width': 75,
'errorMsg': "1111",
'onUploadSuccess': function (file, returndata) {
var fileObject = $.parseJSON(returndata);
isFinish = false;//刚开始上传,默认为false
var cancel = $("#" + file.id + " .cancel a");
if (cancel) {
cancel.live('click', function () {
//通过uploadify的settings方式重置上传限制数量
$('#upload').uploadify('settings', 'uploadLimit', ++uploadLimit);
//防止手快多点几次x,把x隐藏掉
$(this).hide();
//隐藏对应的图片
$("#result").hide();
})
}
$('#uploadify').uploadify('settings', 'queueSizeLimit', uploadLimit);
var mes = fileObject.NewFileName;//保存在文件路径下的名称
var serverPath = "/Upload/SBLY/" + mes;//文件保存路径 ~/Upload/SBLY/201705231316368306.png
$("#divImg").show();
$("#divImg").append("<div class='divItem'><img class='ScenicImg' src='" + serverPath + "' /><img class='delImg' src='/Content/Images/icon_cont_close.png' alt='删除'/><input type='hidden' name='hidimgpath' value='" + serverPath + "' /></div>");
$("#" + file.id).remove();
if (res == "0") {
alert(mes);
return;
} else {
}
},
'onUploadComplete': function (e) {
isFinish = true;//上传完成后设置为true
}
});
// InitFileImg();//该方法是上传之后刷新页面显示之前上传过的图片,也及时初始化图片。demo没必要加这段,实际开发中需要,所以我先注释了
$(".delImg").live("click", function () {
$(this).closest("div").remove();
})
});
//该方法是上传之后刷新页面显示之前上传过的图片。重新加载页面,后台数据库取出图片的路径加载在页面上。demo没必要加这段,实际开发中需要,所以我先注释了
function InitFileImg() {
var jsonResult = '@Html.Raw(ViewData["FileList"].ToString())';//后台传过来的JSON格式的图片路径集合
if (jsonResult.length == 0) { return false; }
var filelist = eval(jsonResult);
var ResultStr = "";
//获取文件目录
var curWwwPath = window.document.location.href;
var pathName = window.document.location.pathname;
var pos = curWwwPath.indexOf(pathName);
var localhostPaht = curWwwPath.substring(0, pos);
//获取文件目录
for (var i = 0; i < filelist.length; i++) {
ResultStr += "<div class='divItem'><img class='ScenicImg' src='" + localhostPaht + filelist[i].filePath + "' /><img class='delImg' src='/Content/Images/icon_cont_close.png' alt='删除'/><input type='hidden' name='hidimgpath' value='" + filelist[i].filePath + "' /></div>";
}
$("#divImg").append(ResultStr);
}
</script>
HTML代码
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
<div class="control-group" style="width:100%;clear:left;">
<div class="controls" id="fileQueue">
<input type="file" id="uploadify" name="FileData" accept=".jpg,.jpeg,.png,.gif,.bmp" class="form-control" />
</div>
</div>
<div class="control-group" id="divImg">
</div>
</div>
</body>
</html>
后台代码
var f = new FileInfo();
try
{
context.Response.ContentType = "text/plain";
context.Response.Charset = "utf-8";
HttpPostedFile file = context.Request.Files["FileData"];
string uploadPath = HttpContext.Current.Server.MapPath((@"~/Upload/SBLY/"));
string fileSaveName = DateTime.Now.ToString("yyyyMMddHHmmssffff");
if (file != null)
{
if (!Directory.Exists(uploadPath))
{
Directory.CreateDirectory(uploadPath);
}
var savepathtmp = uploadPath + file.FileName;
var exe = Path.GetExtension(savepathtmp);
var newsavepath = uploadPath + fileSaveName + exe;
System.IO.FileInfo finfo = new System.IO.FileInfo(newsavepath);
string fileType = finfo.Extension;
if (IsAllowFile(fileType))
{
file.SaveAs(newsavepath);
}
f.SourceFileName = file.FileName;
f.SaveFilePath = newsavepath;
f.NewFileName = fileSaveName + exe;
}
}
catch (Exception ex)
{
f.SourceFileName = "";
f.SaveFilePath = "";
}
finally
{
context.Response.ContentType = "text/plain";
context.Response.Write(SerializationHelper.JsonSerialize(f));
}
/// <summary>
/// 判断上传文件是否在允许范围内
/// </summary>
/// <param name="fileExd">文件后缀</param>
/// <returns></returns>
public bool IsAllowFile(string fileExd)
{
fileExd = fileExd.ToLower();
string[] allowExds = new string[] { ".jpg", ".bmp", ".gif", ".jpeg", ".png" };
if (allowExds.Contains(fileExd))
{
return true;
}
else
{
return false;
}
}
/// <summary>
/// 文件信息
/// </summary>
public class FileInfo
{
/// <summary>
/// 原始文件名称
/// </summary>
public string SourceFileName { set; get; }
/// <summary>
/// 保存在服务器上的物理路径 ,文件名称已经改过成临时文件名
/// </summary>
public string SaveFilePath { get; set; }
/// <summary>
/// 文件新名称
/// </summary>
public string NewFileName { get; set; }
}
最后是效果图:上传过程中带进度条的