使用多线程上传文件的问题
本人遇到一个问题就是使用多线程上传文件,无法上传的问题,代码如下:
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));
}
}
}
}
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));
}
}
}
}
...全文
相关推荐
Android多线程文件上传
单线程上传:传统的文件上传方式通常在一个线程内完成,这可能导致长时间的阻塞,用户体验较差。2. 多线程上传:为了解决这个问题,开发者可以使用多线程同时上传文件的不同部分。
.net ftp多线程批量文件上传
- **匿名登录**:避免使用匿名登录,尽可能使用基于证书的身份验证。以上就是关于".NET FTP多线程批量文件上传"的知识点详解,希望对你有所帮助。
java多线程加队列上传文件_后台处理
### Java多线程加队列上传文件_后台处理#### 概述本文将详细介绍一个基于Java实现的多线程文件上传系统,并结合队列管理技术来优化后台处理流程。
FTP多线程上传文件资料
FTP(File Transfer Protocol)是一种广泛使用的网络协议,用于在互联网上进行文件传输。多线程FTP上传是指通过多个并发连接同时上传文件,以提高文件上传的速度和效率。
C# FTP多线程上传工具源码
在IT行业中,C#是一种广泛使用的编程语言,尤其在开发Windows应用程序、游戏和Web服务时。本项目聚焦于一个特定的应用场景:使用C#实现FTP(文件传输协议)的多线程上传工具。


