(转).net 批量上传图片 时间缓冲问题



关于批量上传图片,大家百度、google一下,肯定能找到很多方法,在这里我先贴出我自己写的方法(其实,网上的也差不多都是类似的这个方法)。

 1前台页面

  .net 批量上传图片 时间缓冲问题 

 

 2后台方法

  首先是开始上传按钮的onclick事件

 

   private voidbtUpload_Click(object sender, System.EventArgs e)     

 {

   //获取所有<inputtype="file" id="fileup" runat="server" >runat="server",必须添加)

              HttpFileCollectionfiles = Request.Files;

                for (int i = 0; i <files.Count; i++)              

   {                       

   UpLoadImage(files[i]); //自己定义的上传方法                 

  }

             }

 

  UpLoadImage(HttpPostedFilefileup)方法中,主要就是文件的保存,不是本篇所要讨论的范围,故此不表!

 

 写到这里,没有任何问题,然后按F5运行测试,问题来啦,当你上传多张(有时上传2张也有这个问题)图片时,你会发现只上传成功了最后一张,也就是说,你上传了5张图片abcde,最后只有e图片上传成功了。

 

 只要有一次出现这个问题,那肯定是自己的代码有问题,一开始认为使自己try{}catch{}块有错误,执行了try{}catch{}里面的catch,把try去掉,竟然还是有问题。没办法,只能通过设断点来调试。当设好断点一步一步来测试时,它竟然完整的执行完了整个代码,没有报任何代码错误,而且结果也是正确的(我上传了5张图片,结果5张图片都上传了)。奇了怪了,再次去掉断点,执行代码,相同的问题又来了!我又再次设了断点,一步一步慢慢的调试,问题竟然奇迹般的又没有了。对这个问题我百思不得其解。于是,我又去掉断点、设上断点循环了多次,只要是有断点的都成功了,没有断点的毫无疑问的失败了。当一次一次的试验后,我开始停止测试,转向思考,一开始我以为是System.Drawing.Image对象的资源没有释放(没有执行Dispose()方法)。我加上后,还是不行。最后我开始比较加断点和不加断点在跑程序时的区别,我想到唯一的区别是:加断点后,我试一步一步慢慢走下去的,而不加断点则是一下子执行完整个代码,在这里就涉及到时间的问题了。然后,忽然灵光一闪:是不是因为执行的太快,for循环中的方法超时?

 

 提出问题后,我就加了一段控制时间的代码,让每次执行for循环中的UpLoadImage方法之间间隔至少1秒,加上代码后,终于在不加断点的情况下测试成功。原来还真是时间超时问题。现附上最终代码!

 

  private voidbtUpload_Click(object sender, System.EventArgs e)

        {              

 //获取所有<input type="file" id="fileup"runat="server" >runat="server",必须添加)

 HttpFileCollection files =Request.Files;  

   DateTime now = DateTime.Now;              

 for (int i = 0; i < files.Count;i++)               

 {

       //设置缓冲为1s——如果不设置此缓冲时间,保存图片会有超时现象(即只能保存第一张)                  

  if (i > 0)//从第二次循环开始                 

   {                       

    DateTime pre =now.AddSeconds(1);//设置下一次保存图片的时间至少在1s后执行                      

    do                       

    {                            

    now = DateTime.Now;                        

   } while (pre > now);                 

   }                     

  UpLoadImage(files[i]); //自己定义的上传方法              

  }

 }

转自:http://blog.163.com/forgetsky_zq/blog/static/12203657320115276323139/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值