使用多线程上传文件的问题

asptoc 2011-04-05 03:23:45
本人遇到一个问题就是使用多线程上传文件,无法上传的问题,代码如下:
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));
}

}
}
}
...全文
279 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
asptoc 2011-04-05
  • 打赏
  • 举报
回复
是不是发生在嵌套类调用会这样。
子夜__ 2011-04-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 asptoc 的回复:]

奇怪为何System.Web.HttpContext.Current.Server.MapPath是NULL
path不是NULL
[/Quote]
呵呵 这就是问题的所在了。。


一步一步调试你的代码、
asptoc 2011-04-05
  • 打赏
  • 举报
回复
奇怪为何System.Web.HttpContext.Current.Server.MapPath是NULL
path不是NULL
asptoc 2011-04-05
  • 打赏
  • 举报
回复
我在单步调试时文件路径和文件名都有值,就是到了SaveAs出现异常
asptoc 2011-04-05
  • 打赏
  • 举报
回复
不行,还是提示对象未设置引用的问题
子夜__ 2011-04-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 asptoc 的回复:]

关键是在fload.PostedFile.SaveAs(System.Web.HttpContext.Current.Server.MapPath(path));
这最后一步,发生了对象未设置引用的问题.
[/Quote]
断点打到
fload.PostedFile.SaveAs(System.Web.HttpContext.Current.Server.MapPath(path));

查看是否为空path 或者是否有效.

有的时候需要这样
Server.MapPath(../路径/...)
asptoc 2011-04-05
  • 打赏
  • 举报
回复
请高手帮忙,得到满意答案马上给分^-^
asptoc 2011-04-05
  • 打赏
  • 举报
回复
关键是在fload.PostedFile.SaveAs(System.Web.HttpContext.Current.Server.MapPath(path));
这最后一步,发生了对象未设置引用的问题.

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧