• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    silverlight用webclient大文件上传的实例代码
    客户端:
    复制代码 代码如下:

         /// summary>
         /// 写入数据到流中
         /// /summary>
         /// param name="url">/param>
         /// param name="callback">/param>
         public async static Taskbool> Write(string url, Stream clientStream)
         {
             if (clientStream.Length > 25*1024*1024)
                 url += "t=1"; // 表示上传大文件
             try
             {
                 Up(url, clientStream);
                 return true;
             }
             catch { }
             return false;
         }
         public async static Task Up(string url, Stream sourceStream)
         {
             var wc = new WebClient();
             byte[] buffer = new byte[25*1024*1024];
             int bufLen = sourceStream.Read(buffer, 0, buffer.Length);
             if (bufLen 1)
             {
                 sourceStream.Close();
                 return;
             }
            wc.WriteStreamClosed += (s, e) =>
             {
                 if (sourceStream.CanRead)
                     Up(url, sourceStream);
                 else
                     sourceStream.Close();
             };
             var serverStream = await wc.OpenWriteTaskAsync(url, "POST");
             serverStream.Write(buffer, 0, bufLen);
             serverStream.Close();
         }

    服务端:
    复制代码 代码如下:

    private void Save()
           {
               string data = Context.Request.QueryString["data"].Base64StringDecode("ABC");
               if (data.IsNullOrEmpty())
                   return;
               var m = JsonConvert.DeserializeObjectFileUploadModel>(data);
               if (m == null)
                   return;
               var isSplitBlock = Context.Request.QueryString["t"]=="1";   //是否分块上传
               #region 保存文件
               // 初始化目录
               string dirPath = Path.Combine(ConfigHelper.UploadPath, m.Dir);   // 文件保存路径
               if (!Directory.Exists(dirPath))
                   Directory.CreateDirectory(dirPath);
               // 文件地址
               string filePath = Path.Combine(dirPath, m.FileName);
               if (!isSplitBlock)
               {
                   if (File.Exists(filePath))
                       File.Delete(filePath);
               }
               int bufLen = 0;
               byte[] buffer = new byte[4096];
               using (FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite))
               {
                   fs.Seek(0, SeekOrigin.End);
                   // 写入原文件
                   Stream sr = Context.Request.InputStream;
                   while ((bufLen = sr.Read(buffer, 0, buffer.Length)) > 0)
                       fs.Write(buffer, 0, bufLen);
                   sr.Close();
                   sr.Dispose();
                   // 缩略图
                   try
                   {
                       if (!m.NeedThumbnail)
                           return;
                       dirPath = Path.Combine(dirPath, "Small");
                       if (!Directory.Exists(dirPath))
                           Directory.CreateDirectory(dirPath);
                       filePath = Path.Combine(dirPath, m.FileName);
                       if (File.Exists(filePath))
                           File.Delete(filePath);
                       using (var pic = GetThumbnail(fs, 300, 300))
                       {
                           pic.Save(filePath);
                       }
                   }
                   catch { }
               }
               #endregion
               #region 删除原文件
               // 删除原文件
               if (m.OldFilePath.IsNullOrEmpty())
               {
                   return;
               }
               try
               {
                   filePath = Path.Combine(ConfigHelper.UploadPath, m.OldFilePath);
                   if (File.Exists(filePath))
                       File.Delete(filePath);
                   if (m.NeedThumbnail)
                   {
                       filePath = Path.Combine(ConfigHelper.UploadPath, m.OldThumbnailImagePath);
                       if (File.Exists(filePath))
                           File.Delete(filePath);
                   }
               }
               catch (Exception ex)
               {
               }
               #endregion
           }

    分块上传注意点:每块流保存完以后再去读取下以块的数据,不然会多块一起过来会前面的块流数据会被后面的块流数据覆盖;
    注重过程的同时注重结果
    您可能感兴趣的文章:
    • 用WebClient.UploadData方法上载文件数据的方法
    • Silverlight中同步调用WebClient的解决办法,是同步!
    • C#中在WebClient中使用post发送数据实现方法
    • 基于WebClient实现Http协议的Post与Get对网站进行模拟登陆和浏览实例
    • C# WebClient类用法实例
    • C# webclient中文乱码问题解决方法
    上一篇:Queryable.Union 方法实现json格式的字符串合并的具体实例
    下一篇:TreeView无刷新获取text及value实现代码
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    silverlight用webclient大文件上传的实例代码 silverlight,用,webclient,大,