控件中国网现已改版,您看到的是老版本网站的镜像,系统正在为您跳转到新网站首页,请稍候.......
中国最专业的商业控件资讯网产品咨询电话:023-67870900 023-67871946
产品咨询EMAIL:SALES@COMPONENTCN.COM

基于wcf的异步上传

作者:佚名 出处:互联网 2011年01月28日 阅读:

基于wcf的异步上传
 
 [OperationContract]
      public void DoUpload(string fileName, byte[] context, bool append)
      {
          //上传目录
          string folder = System.Web.Hosting.HostingEnvironment.MapPath("~/upload");
          if (!System.IO.Directory.Exists(folder))
          {
              //如果上传目录不存在则新建一个
              System.IO.Directory.CreateDirectory(folder);
          }
          //文件读写模式
          FileMode m = FileMode.Create;
          if (append)
          {
              //如果参数为true则表示续传,以追加模式操作文件
              m = FileMode.Append;
          }
 
          //写文件操作
          using (FileStream fs = new FileStream(folder + @"\" + fileName, m, FileAccess.Write))
          {
              fs.Write(context, 0, context.Length);
          }
          return;
    }


 void uploader_DoUploadCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
      {
          if (e.Error == null)
          {
              //上一个包上传成功
              uploadfile file = e.UserState as uploadfile;
              //修改已上传大小(显示作用)
              file.sent += file.context[0].Length / 1000;
              //删除已上传内容
              file.context.RemoveAt(0);
              //如果上传内容是空,完成操作
              if (file.context.Count == 0)
              {
                  bt.Content = "upload";
                  MessageBox.Show("upload OK");
              }
              else
              {
                  //如果上传内容不是空,则继续剩余下一段内容上传
                  (sender as ServiceReference1.uploadServiceClient).DoUploadAsync(file.name, file.context[0], true, file);
                  //显示进度
                  bt.Content = file.sent.ToString() + "/" + file.size.ToString();
              }
          }
      }
  }

  public class uploadfile
 {
     //文件名
     public string name { get; set; }
     //文件大小
      public double size { get; set; }
     //已上传
      public double sent { get; set; }
     //上传内容
      public List<byte[]> context { get; set; }
 }


 //点击事件
     void bt_Click(object sender, RoutedEventArgs e)
     {
          //选择本地文件对话框
          OpenFileDialog d = new OpenFileDialog();
          //文件过滤
          d.Filter = "(*.*)|*.*";
          //只能选单个文件
          d.Multiselect = false;
          //选择完成
          if (d.ShowDialog() == true)
          {
              //文件信消
              FileInfo f = d.File;
              //新实例化一个文件从uploadfile类
              uploadfile file = new uploadfile();
              //文件名
              file.name = f.Name;
              //文件流内容
              Stream s = f.OpenRead();
              //文件大小(/1000是为了方便查看,成为k为单位)
              file.size = s.Length / 1000;
              //实例file的内容
              file.context = new List<byte[]>();
 
              //这里读取指定大小的文件流内容到file.context准备上传
              int b;
              while (s.Position > -1 && s.Position < s.Length)
              {
                  if (s.Length - s.Position >= 300)
                  {
                      b = 3000;
                  }
                  else
                   {
                       b = (int)(s.Length - s.Position);
                  }
 
                   byte[] filebyte = new byte[b];
                   s.Read(filebyte, 0, b);
                   file.context.Add(filebyte);
               }
              s.Close();
 
               //实例化wcf客户端
               ServiceReference1.uploadServiceClient uploader = new uploadFile.ServiceReference1.uploadServiceClient();
               //注册DoUpload完成事件
               uploader.DoUploadCompleted += new EventHandler<System.ComponentModel.AsyncCompletedEventArgs>(uploader_DoUploadCompleted);
               //开始第一个包的上传
               uploader.DoUploadAsync(file.name, file.context[0], false, file);
           }
      }
 

热推产品

  • ActiveReport... 强大的.NET报表设计、浏览、打印、转换控件,可以同时用于WindowsForms谀坔攀戀Forms平台下......
  • AnyChart AnyChart使你可以创建出绚丽的交互式的Flash和HTML5的图表和仪表控件。可以用于仪表盘的创......
首页 | 新闻中心 | 产品中心 | 技术文档 | 友情连接 | 关于磐岩 | 技术支持中心 | 联系我们 | 帮助中心 Copyright-2006 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 电话:023 - 67870900 传真:023 - 67870270 产品咨询:sales@componentcn.com 渝ICP备12000264号 法律顾问:元炳律师事务所 重庆市江北区塔坪36号维丰创意绿苑A座28-5 邮编:400020
在线客服
在线客服系统
在线客服
在线客服系统