zoukankan      html  css  js  c++  java
  • WSE 2.0中使用Stream作为附件

    开始想直接写dimeStream没有成功
    改用MemoryStream再用dimeAttach的Stream构造函数
    必须要将Stream Seek 到SeekOrigin.Begin才能成功

     1        /// <summary>
     2        /// 分块下载附件
     3        /// </summary>
     4        /// <param name="sFileName">文件名</param>
     5        /// <param name="offset">文件起始偏移量</param>
     6        /// <param name="size">一次读取大小</param>
     7        /// <returns>返回附件文件大小</returns>

     8        [WebMethod]
     9        public int GetPartitionAttachment( string sFileName,int offset, int size)
    10        {
    11            string[] names = sFileName.Split("\\".ToCharArray());
    12            string filename=Server.MapPath(names[names.Length - 1]);
    13
    14            byte[] buffer = new byte[size];            
    15            FileStream fs = new FileStream(filename, FileMode.Open,FileAccess.Read,FileShare.Read);
    16            fs.Seek(offset,SeekOrigin.Begin);
    17            int numBytes;            
    18            if((numBytes = fs.Read(buffer,0,size)) > 0)
    19            {
    20                try
    21                {                    
    22                    MemoryStream ms = new MemoryStream(buffer,0,size);                    
    23                    ms.Seek(0,SeekOrigin.Begin);
    24
    25                    ResponseSoapContext.Current.Attachments.Add(new dime.DimeAttachment("File","image/jpeg",dime.TypeFormat.MediaType,ms));
    26                    return numBytes;
    27                }

    28                finally
    29                {
    30                    fs.Close();    
    31                }

    32            }

    33            else
    34            {
    35                return 0;
    36            }

    37            
    38        }


    客户端代码示例:

     1  private void button2_Click(object sender, System.EventArgs e)
     2  {
     3   int offset = 0;
     4   int buffersize = 3* 1024*1024;
     5   bool bComplete = false;
     6   FileStream fs = null;
     7   string sFileName = textBox1.Text;
     8   Adb.AdvWse adv = new TestWebSrv.Adb.AdvWse();
     9   byte[] buffer = new byte[buffersize];
    10   int size = 0;
    11   int result = 0;
    12   System.DateTime time = DateTime.Now;
    13
    14   while!bComplete )
    15   {
    16    Application.DoEvents();
    17    try
    18    {
    19     result = adv.GetPartitionAttachment(sFileName,offset,buffersize);
    20     if (result == 0
    21     {
    22      bComplete = true;
    23      break;
    24     }

    25     if (adv.ResponseSoapContext.Attachments.Count != 0)
    26     {
    27      fs = new System.IO.FileStream(sFileName,FileMode.OpenOrCreate,FileAccess.Write);
    28      fs.Seek(0,SeekOrigin.End);
    29      size = adv.ResponseSoapContext.Attachments[0].Stream.Read(buffer,0,buffersize);      
    30      fs.Write(buffer,0,result);
    31      offset += result;
    32      textBox2.Text = offset.ToString()+"Bytes Received\r\n" + textBox2.Text;
    33      Application.DoEvents();
    34     }

    35     else
    36     {
    37      bComplete = true;
    38      break;
    39     }

    40    }

    41    finally
    42    {
    43     fs.Close();
    44    }

    45
    46    System.TimeSpan time1 = DateTime.Now - time;
    47    this.Text = time1.ToString();
    48   }

    49
    50   
    51  }

    52
  • 相关阅读:
    windows权限维持之注册表
    mstsc痕迹清理
    内网常用爆破手法
    RDP攻击&防御
    Java SPI 机制
    mysqldump 数据库备份
    Redis分布式锁
    Seata分布式事务中间件学习和实践
    pytube
    idea github登录
  • 原文地址:https://www.cnblogs.com/calmzeal/p/311422.html
Copyright © 2011-2022 走看看