使用多线程上传文件的问题
本人遇到一个问题就是使用多线程上传文件,无法上传的问题,代码如下:
public partial class B2c_Admin_b2c_uploadbulkclass : B2cBaseClass
{
protected work w;
protected void Page_Load(object sender, EventArgs e)
{
// 在此处放置用户代码以初始化页面
if (Session["work"] == null)
{
w = new work();
Session["work"] = w;
}
else
{
w = (work)Session["work"];
}
switch (w.State)
{
case 0:
{
PopMessage.InnerHtml = "<script>openload(0);</script>";
break;
}
case 1:
{
PopMessage.InnerHtml = "<script>openload(21000);</script>";
break;
}
case 2:
{
PopMessage.InnerHtml = "<script>openload(0);</script>";
MessageShow.InnerHtml = "<script>tipsmessage('1','批量分类上传成功!');</script>";
break;
}
case 3:
{
PopMessage.InnerHtml = "<script>openload(0);</script>";
MessageShow.InnerHtml = "<script>tipsmessage('2','批量分类上传失败!');</script>";
w.Dispose();
break;
}
}
}
protected void txtUploadClass_Click(object sender, EventArgs e)
{
if (!IsFile(fileupload.UploadFile))
{
return;
}
w = (work)Session["work"];
w.fu = fileupload.UploadFile;
if (w.State != 1)
{
w.runwork();
Page.ClientScript.RegisterStartupScript(GetType(), "threadscript", "<script>location.href=location.href;</script>");
}
//PopMessage.InnerHtml = "<script>openload(21000);</script>";
//PopMessage.InnerHtml = "<script>openload(0);</script>";
//MessageShow.InnerHtml = "<script>tipsmessage('1','批量分类上传成功!');</script>";
}
private bool IsFile(FileUpload fuload)
{
int len = fuload.PostedFile.ContentLength; //获取文件的容量大小,判断上传的是否为空文件
if (len == 0)
{
MessageShow.InnerHtml = "<script>tipsmessage('2','不能上传空文件!');</script>";
return false;
}
if (!B2c.Common.Security.IsExcelExtension(fuload))
{
MessageShow.InnerHtml = "<script>tipsmessage('2','只允许上传xls格式文件!');</script>";
return false;
}
if (len > 1024000)
{
//对上传的EXLCEL文件容量进行限制
MessageShow.InnerHtml = "<script>tipsmessage('2','xls文件容量不能超过1M!');</script>";
return false;
}
return true;
}
protected class work : B2c_Admin_b2c_uploadbulkclass
{
public int State = 0;//0-没有开始,1-正在运行,2-成功结束,3-失败结束
public FileUpload fu;
public void runwork()
{
lock (this)
{
if (State != 1)
{
State = 1;
System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(dowork));
thread.Start();
}
}
}
private void dowork()
{
int i = 0;
try
{
if (i == 0)
{
UpLoad(fu);
}
i++;
System.Threading.Thread.Sleep(100);
//以上代码执行一个比较消耗时间的数据库操作
State = 2;
}
catch
{
State = 3;
}
}
private void UpLoad(FileUpload fload)
{
HttpPostedFile postFile = fload.PostedFile; //获取上传控件对象
string path = "uploadfile/";
if (postFile != null)
{
path = path + fload.PostedFile.FileName;//设定上传图片要存放的物理路径
fload.PostedFile.SaveAs(System.Web.HttpContext.Current.Server.MapPath(path));
}
}
}
}