pcyifei0106 2016-06-23 02:53 采纳率: 0%
浏览 1206
已结题

C#编写的 wcf服务对流文件的处理 求大神帮指出问题在哪

服务契约:

    [OperationContract]
    [WebInvoke(

        UriTemplate = "RegistMember/?MemberID={MemberID}",
        //RequestFormat = WebMessageFormat.Json,
        //ResponseFormat = WebMessageFormat.Json,
        //BodyStyle = WebMessageBodyStyle.WrappedRequest
        Method = "POST")]
    bool RegistMember(System.IO.Stream stream, int MemberID);

            服务内容:
              public bool RegistMember(System.IO.Stream stream, int MemberID)
    {

        try
        {
            string folder = System.Web.Hosting.HostingEnvironment.MapPath("~/RegistPhotos");
            if (!Directory.Exists(folder))
            {
                Directory.CreateDirectory(folder);//没有文件夹 创建文件夹
            }
            string path = Path.Combine(folder, MemberID.ToString() + ".jpg");//文件夹路径

            using (var ms = new MemoryStream())
            {
                stream.CopyTo(ms); 
                ms.Position = 0;
                Encoding encoding = System.Text.Encoding.UTF8;
                var reader = new StreamReader(ms, encoding);
                var headerLength = 0;
                //读第一行,一般表单头标志是带有“-----”字符的例如:
                string firstLine = reader.ReadLine();
                if (firstLine.Contains("--"))
                {
                    headerLength += encoding.GetBytes(firstLine).Length + 2;
                    //读第二行,第二行还可以获得上传文件的名字                    
                    var secondLine = reader.ReadLine();
                    headerLength += encoding.GetBytes(secondLine).Length + 2;
                    //var fileName = new  System.Text.RegularExpressions.Regex("filename=\"(?<fn>.*)\"").Match(secondLine).Groups["fn"].Value;                    
                    //可能还有辅助信息,把这些行都读完,一直到一行空 下面的是文件的内容                   
                    while (true)
                    {
                        var line = reader.ReadLine();
                        if (line == null)
                            break;
                        //加2是换行符                          
                        headerLength += encoding.GetBytes(line).Length + 2;
                        if (line == "")
                            break;
                    }
                }

                ms.Position = headerLength;//文件的开始位置                
                //在文件的最后也有表单的最后结尾和第一行相同,
                ////减去末尾的字符串:“\r\n--\r\n”                 
                if (firstLine.Contains("--"))
                    ms.SetLength(ms.Length - encoding.GetBytes(firstLine).LongLength - 3 * 2);
                else
                    ms.SetLength(ms.Length);
                using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write))
                {
                    ms.CopyTo(fs);
                    fs.Close();
                    fs.Dispose();
                }

            }

            string sql = "UPDATE Viw_Robot_Member_List SET IsRegister=2 WHERE MemberId=@MemberID";

            SqlParameter[] params_sql = new SqlParameter[]{
                SqlHelper.MakeInParam("@MemberID",MemberID)
            };

            db.robot.ExecuteNonQuery(sql, params_sql);

            return true;
        }
        catch
        {
            return false;
        }

    }
  • 写回答

2条回答 默认 最新

  • pcyifei0106 2016-06-23 03:08
    关注

    会不会跟配置文件有关?

    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作