经过一天的研究, 文件上传总共需要如上几个文件
- uploadFile.aspx上只是有一个file HTML控件, 后台代码只是初始化上传文件目录
UploadContext context = UploadContextFactory.InitUploadContext(this, "/files");
它引用了jquery form,blockUI,progressBar等插件,还包含了uploadfile.js - uploadfile.js是获取进度条的一些操作(主要就是这个JS来操作)
- $(function()
- {
- var info = '<div style="display:none" id="uploadinfo">';
- info += '<p>正在上传: <span id="uploadfilename"></span>; 状态: <span id="uploadtitle"></span>;</p>';
- info += '<p>上传速度: <span id="uploadrate"></span>;预计剩余时间: <span id="uploadlefttime"></span></p>';
- info += '<p>上传文件大小: <span id="uploadtotal"></span>;已上传大小: <span id="uploadcurrent"></span></p>';
- info += '<div id="uploadprogressbar"></div>';
- info += '</div>';
- $("body").append(info);
- //进度条
- $("#uploadprogressbar").progressbar();
- //上传
- $('#fileupload').MultiFile(
- {
- STRING:
- {
- remove:'移除',
- selected:'选择了: $file',
- denied:'不能使用 $ext 类文件!'
- }
- }
- );
- });
- //上传提交
- function upload()
- {
- $("#uploadForm").ajaxSubmit(
- {
- url: "uploadfile_process.aspx?guid=" + $("#UploadID").val(),
- dataType: 'text',
- beforeSubmit: function(a,f,o)
- {
- startProgress();
- },
- async:false,
- clearForm:true,
- resetForm:true,
- success: function(data)
- {
- //成功后刷新页面,获取新的uploadid
- },
- error:function(err)
- {
- alert($(err).html());
- }
- });
- }
- function getProgress(){
- $.ajax({
- type: "post",
- dataType:"json",
- url: "uploadProgress.aspx", //获取进度条
- data: "UploadID=" + $("#UploadID").val(),
- success: function(data){
- $("#uploadprogressbar").progressbar("progress", data.percent);
- $("#uploadfilename").html(data.filename);
- $("#uploadrate").html(data.rate);
- $("#uploadtitle").html(data.info);
- $("#uploadlefttime").html(data.lefttime);
- $("#uploadtotal").html(data.total);
- $("#uploadcurrent").html(data.current);
- if(data.succ==-1){
- alert(data.info);
- }
- if (data.succ==0){
- setTimeout("getProgress()", 1000);
- }
- if (data.succ==1){
- stopProgress();
- return;
- }
- },
- error:function(msg)
- {
- alert($(msg).html());
- }
- });
- }
- function startProgress(){
- $.blockUI({message:$("#uploadinfo")});
- setTimeout("getProgress()", 500);
- }
- function stopProgress()
- {
- $.unblockUI();
- }
- uploadfile_process.aspx是对上传后的文件进行处理
- uploadProgress.aspx 获取进度条运行后效果如下:
- try
- {
- string s = "{";
- //返回一个JSON数组,通过uploadID来获取上传的进程
- UploadContext upload = UploadContextFactory.GetUploadContext(Request["UploadID"]);
- //初始化
- if (upload.Status == uploadStatus.Initializing)
- {
- s += responeJSON(upload, "0", "");
- }
- if (upload.Status == uploadStatus.Uploading)
- {
- s += responeJSON(upload, "0", "");
- }
- if (upload.Status == uploadStatus.Complete)
- {
- s += responeJSON(upload, "1", "");
- }
- if (upload.Status == uploadStatus.HasError)
- {
- s += responeJSON(upload, "-1", "");
- }
- s += "}";
- Response.Write(s);
- }
- catch (Exception err)
- {
- //throw err;
- Response.Write("{'info':'" + err.Message.Replace("'", "") + "','succ':-1}");
- }
- }
- private string responeJSON(UploadContext upload, string succ,string errmsg)
- {
- string s = "";
- s += "'info':'" + upload.FormatStatus + "'" ;
- s += ",'percent':'" + Convert.ToInt32((upload.Readedlength * 100.0 / upload.TotalLength)).ToString() + "'";
- s += ",'current':'" + (upload.Readedlength/1024).ToString() + "KB'";
- s += ",'total':'" + (upload.TotalLength/1024).ToString() + "KB'";
- s += ",'rate':'" + upload.FormatRatio + "'";
- s += ",'filename':'" + upload.CurrentFile + "'";
- s += ",'cancel_upload':" + 0 ;
- s += ",'lefttime':'" + upload.LeftTime + "'";
- s += ",'succ':" + succ;
- s += ",'errmsg':'" + errmsg +"'";
- return s;
- }
- 总结:
在你需要上传的页面用包含一个uploadFile.aspx页面,如下
<iframe id="iUpload" src="../../common/ajax/uploadfile/uploadFile.aspx" frameborder="0" width="100%" height="300"></iframe>
然后在这个页面放一个按钮,该按钮事件调用uploadfile.aspx中js文件uploadfile.js中upload()事件我的上传页面.aspx 包含 uploadfile.aspx 调用 uploadprogress.aspx?guid=xxxx来显示进度,并上传完成后 调用 uploadfile_process.aspx?guid=xxxx,来获取上传的文件ID等信息,作下一步处理(如写到数据库)- $(function()
- {
- $("#img_submit").click(function()
- {
- var v= document.getElementById("iUpload").contentWindow;
- v.upload();
- });
- });