Example #1
0
        /// <summary>
        /// MultipartForm请求
        /// </summary>
        /// <param name="postUrl">服务地址</param>
        /// <param name="userAgent"></param>
        /// <param name="postParameters">参数</param>
        /// <returns></returns>
        public static HttpWebResponse MultipartFormDataPost(string postUrl, string userAgent, Dictionary <string, object> postParameters)
        {
            string text        = string.Format("----------{0:N}", Guid.NewGuid());
            string contentType = "multipart/form-data; boundary=" + text;//multipart类型

            byte[] multipartFormData = HttpHelper4MultipartForm.GetMultipartFormData(postParameters, text);
            return(HttpHelper4MultipartForm.PostForm(postUrl, userAgent, contentType, multipartFormData));
        }
        public void ProcessRequest(HttpContext context)
        {
            context.Response.AppendHeader("Access-Control-Allow-Origin", "*");
            context.Response.ContentType = "application/x-www-form-urlencoded";
            //context.Response.ContentType = "application/json";
            context.Response.ContentEncoding = Encoding.UTF8;
            int    code      = 0;
            string msg       = "";
            string strError  = "";
            string strResult = "";


            //图片二进制转文件
            //读入已有的二进制文件
            //设置打开文件的格式

            /*string ConfigPth = HttpContext.Current.Server.MapPath(context.Request.ApplicationPath) + @"\test\002.dat";//获取当前路
             * string binary = "";//二进制流字符串
             * byte[] bytes = null;
             * //使用“打开”对话框中选择的文件名实例化FileStream对象
             * FileStream myStream = new FileStream(ConfigPth, FileMode.Open, FileAccess.Read);
             * //使用FileStream对象实例化BinaryReader二进制写入流对象
             * BinaryReader myReader = new BinaryReader(myStream);
             * if (myReader.PeekChar() != -1)
             * {
             *  //以二进制方式读取文件中的内容
             *  try
             *  {
             *      myReader.BaseStream.Seek(0, SeekOrigin.Begin);
             *      bytes = myReader.ReadBytes(Convert.ToInt32(myStream.Length.ToString()));
             *      binary = System.Text.Encoding.Default.GetString(bytes);
             *  }
             *  catch(EndOfStreamException ex)
             *  {
             *      msg = ex.Message;
             *  }
             * }
             * //关闭当前二进制读取流
             * myReader.Close();
             * //关闭当前文件流
             * myStream.Close();
             * strResult = "{\"binary\":\"" + binary + "\",\"msg\":\"" + msg + "\"}";
             * //context.Response.Write(strResult);*/

            //读取context中的二进制流,与读入已有的二进制文件二选一

            byte[] bytes = new byte[context.Request.InputStream.Length];



            context.Request.InputStream.Read(bytes, 0, bytes.Length);
            string binary = System.Text.Encoding.Default.GetString(bytes);

            //msg = "";
            strResult = "{\"binary\":\"" + binary + "\",\"msg\":\"" + msg + "\"}";
            //context.Response.Write(strResult);


            //转化图片

            int    filelength = bytes.Length;//获得数组的长度
            string time       = DateTime.Now.ToString("yyyyMMdd-HH-mm-ss");

            System.Random a       = new Random(System.DateTime.Now.Millisecond); // use System.DateTime.Now.Millisecond as seed
            int           RandKey = a.Next(10000);
            string        picName = time + RandKey.ToString() + ".jpeg";
            //string myUrl = "E:/STUDY/ProAPI/ProAPI/ProAPI/"+picName;//图片地址
            string myUrl = HttpContext.Current.Server.MapPath(context.Request.ApplicationPath) + @"test\" + picName;//图片地址

            // 创建文件流
            FileStream   fs = new FileStream(myUrl, FileMode.OpenOrCreate);
            BinaryWriter w  = new BinaryWriter(fs);   //以二进制的形式将基元内写入流

            w.BaseStream.Write(bytes, 0, filelength); //把数据库中的图片二进制添加到BinaryWriter
            w.Flush();
            w.Close();

            //执行情绪识别
            //参数字典
            Dictionary <string, object> verifyPostParameters = new Dictionary <string, object>();

            verifyPostParameters.Add("api_key", "JOjwHIfsDGiJddKzdq2Fgbc4xmrcQrFD");
            verifyPostParameters.Add("api_secret", "PMJ-qFt4anrI5AZgv7waPjaBhaN1ejJw");
            verifyPostParameters.Add("return_landmark", "1");
            verifyPostParameters.Add("return_attributes", "emotion");
            Bitmap bmp = new Bitmap(myUrl); // 图片地址

            byte[] fileImage;
            using (Stream stream1 = new MemoryStream())
            {
                bmp.Save(stream1, ImageFormat.Jpeg);
                byte[] arr = new byte[stream1.Length];
                stream1.Position = 0;
                stream1.Read(arr, 0, (int)stream1.Length);
                stream1.Close();
                fileImage = arr;
            }
            //添加图片参数
            verifyPostParameters.Add("image_file", new HttpHelper4MultipartForm.FileParameter(fileImage, picName, "application/octet-stream"));
            HttpWebResponse verifyResponse = HttpHelper4MultipartForm.MultipartFormDataPost("https://api-cn.faceplusplus.com/facepp/v3/detect", "", verifyPostParameters);

            //context.Response.Write(verifyResponse);
            //HttpWebResponse myResponse = (HttpWebResponse)verifyResponse.GetResponse();
            Stream       myResponseStream = verifyResponse.GetResponseStream();
            StreamReader reader           = new StreamReader(myResponseStream, Encoding.UTF8);
            string       returnjson       = reader.ReadToEnd();

            myResponseStream.Close();
            reader.Close();
            verifyResponse.Close();
            //context.Response.Write(returnjson);
            //return returnjson;

            //上传数据库
            try
            {
                JObject    result = JObject.Parse(returnjson);//假设result为数据结构
                DTOPicInfo data   = new DTOPicInfo();
                //data.error_message = result["error_message"].Value<string>("error_message");
                data.face_num = result.Value <int>("face_num");
                JArray faces = result.Value <JArray>("faces");

                JObject facesjb = JObject.Parse(faces[0].ToString());
                data.attributes = facesjb["attributes"]["emotion"].ToString();
                DTOPicInfo model = JsonConvert.DeserializeObject <DTOPicInfo>(data.attributes);
                data.anger     = model.anger;
                data.disgust   = model.disgust;
                data.happiness = model.happiness;
                data.neutral   = model.neutral;
                data.sadness   = model.sadness;
                data.surprise  = model.surprise;
                data.fear      = model.fear;
                time           = DateTime.Now.ToString("yyyyMMdd HH:mm:ss");
                strResult      = "{\"anger\":\"" + data.anger.ToString() + ",\"disgust\":\"" + data.disgust.ToString() + ",\"happiness\":\"" + data.happiness.ToString() + "\"}";
                context.Response.Write(strResult);


                if (strError == "")
                {
                    //string strSql = "insert into aPicture(anger,disgust,happiness,neutral,sadness,surprise) values('" + data.anger + "','" + data.disgust + "','" + data.happiness + "','" + data.neutral + "','" + data.sadness + "','" + data.surprise + "');";
                    string strSql = "insert into aPicture(anger,disgust,happiness,neutral,sadness,GetInfoTime,facenum,Path,surprise,fear) values('" + data.anger + "','" + data.disgust + "','" + data.happiness + "','" + data.neutral + "','" + data.sadness + "','" + time + "','" + data.face_num + "','" + myUrl + "','" + data.surprise + "','" + data.fear + "');";
                    int    iRows  = SqlHelper.ExecInsert_Update_Delete(strSql);
                    if (iRows > 0)
                    {
                        code = 1;
                        msg  = "操作成功!";
                    }
                }
                else
                {
                    code = 0;
                    msg  = strError;
                }
            }
            catch (Exception ex)
            {
                code = 0;
                msg  = "操作失败!" + ex.Message;
            }
            strResult = "{\"code\":" + code + ",\"msg\":\"" + msg + "\"}";
            context.Response.Write(strResult);
        }