前台js
页面代码
<div>
<table style="margin: 0 auto;width:100%">
<tr>
<td colspan="4" style="padding-top: 15px;">
<div id="uploader" class="wu-example">
<!--用来存放文件信息-->
<div id="thelist" class="uploader-list"></div>
<div class="btns">
<div id="picker">选择文件</div>
<input id="ctlBtn" type="button" value="开始上传" class="btn btn-default" />
</div>
</div>
<br />
</td>
</tr>
</table>
</div>
引入js文件
<script src="scripts/jquery-1.10.2.min.js"></script>
<script src="scripts/webuploader.js"></script>
<script src="scripts/bootstrap.min.js"></script>
<link href="../css/bootstrap.css" rel="stylesheet" />
<link href="../css/webuploader.css" rel="stylesheet" />
<script>
var applicationPath = window.applicationPath === "" ? "" : window.applicationPath || "..";
var GUID = WebUploader.Base.guid();
$(function () {
ininnForm();
var $ = jQuery;
var $list = $('#thelist');
var uploader = WebUploader.create({
auto: false,
swf: 'scripts/Uploader.swf',
server: 'Fileashx.ashx',
pick: '#picker',
chunked: true,
chunkSize: 1024 * 1024,
formData: {
guid: GUID,
saveFileName: FileUpload.CreatFileName(BiddingBody).value
},
resize: false
});
uploader.on('fileQueued', function (file) {
$list.append('<div id="' + file.id + '" class="item">' +
'<h4 class="info">' + file.name + '</h4>' +
'<div style="overflow:hidden;"><p style="float:left;" class="state">等待上传...</p><span class="text"></span></div>' +
'</div>');
});
uploader.on('uploadProgress', function (file, percentage) {
var $li = $('#' + file.id),
$percent = $li.find('.progress .progress-bar');
if (!$percent.length) {
$percent = $('<div class="progress progress-striped active">' +
'<span class="percentage">' +
'<div class="progress-bar" role="progressbar" style="width: 0%">' +
'</div>' +
'</div>').appendTo($li).find('.progress-bar');
}
$li.find('p.state').text('上传中');
$li.find("span.text").text(Math.round(percentage * 100) + '%');
$percent.css('width', percentage * 100 + '%');
});
uploader.on('uploadSuccess', function (file, response) {
console.log(response);
$('#' + file.id).find('p.state').text('已上传');
if (response.Flag != 1) {
alert(response.FlagMessage);
}
});
uploader.on('uploadError', function (file) {
$('#' + file.id).find('p.state').text('上传出错');
});
uploader.on('uploadComplete', function (file) {
$('#' + file.id).find('.progress').fadeOut();
});
uploader.on("uploadFinished", function () {
args.jsUpload();
window.close();
});
$("#ctlBtn").click(function () {
$("#picker input").attr("disabled", true);
uploader.upload();
});
uploader.on('uploadBeforeSend', function (obj, data, headers) {
$.extend(headers, {
Accept: "/*"
});
});
});
</script>
一般处理程序代码
public class Fileashx : IHttpHandler, IRequiresSessionState
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain"
try
{
string SaveRandfileName = context.Request["saveFileName"];
#endregion
string savePath = "/upload/" + SaveRandfileName + "/";
string fileUrl = "";
string fileExt = "";
string SavefileName = "";
System.Collections.Hashtable extTable = new System.Collections.Hashtable();
extTable.Add("image", "gif,jpg,jpeg,png,bmp");
extTable.Add("flash", "swf,flv");
extTable.Add("media", "swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb");
extTable.Add("file", "doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2");
if (context.Request.Form.AllKeys.Any(m => m == "chunk"))
{
try
{
string fileName = context.Request["name"];
fileExt = Path.GetExtension(fileName).ToLower();
if (String.IsNullOrEmpty(fileExt))
{
context.Response.Write("error");
}
fileName = SaveRandfileName + fileExt;
string fileRelName = fileName.Substring(0, fileName.LastIndexOf('.'));
int chunk = Convert.ToInt32(context.Request.Form["chunk"]);
int chunks = Convert.ToInt32(context.Request.Form["chunks"]);
var uploadDir = context.Server.MapPath("~/Upload/" + savePath + "/" + fileRelName + "/");
var dir = Path.Combine(uploadDir, fileRelName);
if (!System.IO.Directory.Exists(uploadDir))
{
System.IO.Directory.CreateDirectory(uploadDir);
}
string path = uploadDir + chunk;
FileStream addFile = new FileStream(path, FileMode.Append, FileAccess.Write);
BinaryWriter AddWriter = new BinaryWriter(addFile);
HttpPostedFile file = context.Request.Files[0];
Stream stream = file.InputStream;
BinaryReader TempReader = new BinaryReader(stream);
AddWriter.Write(TempReader.ReadBytes((int)stream.Length));
TempReader.Close();
stream.Close();
AddWriter.Close();
addFile.Close();
TempReader.Dispose();
stream.Dispose();
AddWriter.Dispose();
addFile.Dispose();
#region 文件合并
string targetPath = context.Server.MapPath("~/Upload/" + savePath + "/" + fileName);
DirectoryInfo dicInfo = new DirectoryInfo(uploadDir);
if (Directory.Exists(Path.GetDirectoryName(uploadDir)))
{
FileInfo[] Allfiles = dicInfo.GetFiles();
if (Allfiles.Length == chunks)
{
foreach (FileInfo Newfile in Allfiles.OrderBy(f => int.Parse(f.Name)))
{
FileStream addTargetFile = new FileStream(targetPath, FileMode.Append, FileAccess.Write);
BinaryWriter AddTargetWriter = new BinaryWriter(addTargetFile);
Stream Targetstream = Newfile.Open(FileMode.Open);
BinaryReader TempTargetReader = new BinaryReader(Targetstream);
AddTargetWriter.Write(TempTargetReader.ReadBytes((int)Targetstream.Length));
TempTargetReader.Close();
Targetstream.Close();
AddTargetWriter.Close();
addTargetFile.Close();
TempTargetReader.Dispose();
Targetstream.Dispose();
AddTargetWriter.Dispose();
addTargetFile.Dispose();
}
DeleteFolder(uploadDir);
context.Response.Write("success");
}
}
else
{
context.Response.Write("error");
}
#endregion
}
catch (Exception ex)
{
context.Response.Write("error");
}
}
else
{
string fileName = context.Request.Files[0].FileName;
fileExt = Path.GetExtension(fileName).ToLower();
if (String.IsNullOrEmpty(fileExt))
{
context.Response.Write("上传文件扩展名是不允许的扩展名。");
return;
}
String dirPath = context.Server.MapPath("~/Upload/" + savePath);
if (!Directory.Exists(dirPath))
{
Directory.CreateDirectory(dirPath);
}
fileName = SaveRandfileName + fileExt;
context.Request.Files[0].SaveAs(dirPath + fileName);
context.Response.Write("success");
}
}
catch (Exception e)
{
context.Response.Write("error");
}
context.Response.Write("success");
}
public void Merge(string fileName, string guid, string uploadDir)
{
string fileRelName = fileName.Substring(0, fileName.LastIndexOf('.'));
var dir = Path.Combine(uploadDir, fileRelName);
var files = System.IO.Directory.GetFiles(dir);
var finalPath = Path.Combine(uploadDir, fileName);
var fs = new FileStream(finalPath, FileMode.Create);
foreach (var part in files.OrderBy(x => x.Length).ThenBy(x => x))
{
var bytes = System.IO.File.ReadAllBytes(part);
fs.Write(bytes, 0, bytes.Length);
bytes = null;
System.IO.File.Delete(part);
}
fs.Flush();
fs.Close();
System.IO.Directory.Delete(dir);
}
public bool IsReusable
{
get
{
return false;
}
}
private static void DeleteFolder(string strPath)
{
if (Directory.GetDirectories(strPath).Length > 0)
{
foreach (string fl in Directory.GetDirectories(strPath))
{
Directory.Delete(fl, true);
}
}
if (Directory.GetFiles(strPath).Length > 0)
{
foreach (string f in Directory.GetFiles(strPath))
{
System.IO.File.Delete(f);
}
}
Directory.Delete(strPath, true);
}
}