Пример #1
0
        /// <summary>
        /// Post method for receiving an image. Server receive an HTTP multipart-data message containing a .bmp file used for face recognition.
        /// Metodo Post per la ricezione di un'immagine. Il server riceve un HTTP message di tipo multipart-data che contiene un file .bmp su cui viene effettuato il riconoscimento.
        /// </summary>
        /// <returns></returns>
        public HttpResponseMessage Post()
        {
            User   ricerca = null;
            string msg     = "OK";
            //bool login = true;
            HttpResponseMessage response = null;

            System.Net.HttpStatusCode httpStatusCode = System.Net.HttpStatusCode.Created;

            //db.NewErrorLog("Sono entrato e mi faccio un giro!", DateTime.Now);

            try
            {
                // Check if the request contains multipart/form-data.
                if (!Request.Content.IsMimeMultipartContent())
                {
                    throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
                }

                //db.NewErrorLog("IP Schedina : "+HttpContext.Current.Request.UserHostAddress.ToString(),DateTime.Now);

                MultipartFormDataParser dataParser = new MultipartFormDataParser(HttpContext.Current.Request.InputStream);

                Dictionary <string, ParameterPart> dictionary = dataParser.Parameters;
                //db.NewErrorLog("Numero di files : "+dataParser.Files.Count,DateTime.Now);
                List <FilePart> list = dataParser.Files;

                if (list.Count > 0)
                {
                    foreach (FilePart f in list)
                    {
                        Image returnImage = Image.FromStream(f.Data);

                        Bitmap b = new Bitmap(returnImage);

                        //INIZIO RICERCA
                        Image <Bgr, byte> img    = new Image <Bgr, byte>(b);
                        List <String>     labels = new List <String>();
                        List <Bitmap>     images = new List <Bitmap>();
                        db.GetFaces(labels, images);

                        if (labels.Count == 0 && images.Count == 0)
                        {
                            msg            = "errore no immagini database!";
                            httpStatusCode = System.Net.HttpStatusCode.InternalServerError;
                        }
                        else
                        {
                            String result = String.Empty;
                            if (FaceRecMethod(labels, images, b, ref result))
                            {
                                //trovata corrispondenza in db
                                //result contiene label dell'immagine trovata

                                if (db.VerifyUserExists(result))
                                {
                                    //l'utente è registrato
                                    msg = "Welcome " + result + "!";
                                    db.NewErrorLog("result found : " + result, DateTime.Now);

                                    //INSERIMENTO ACCESSO
                                    int codice = Convert.ToInt32(result.Substring(1, result.Length - 1));
                                    db.InserAccessUser(codice, DateTime.Now, DatabaseManagement.FACE, b);
                                }
                                else
                                {
                                    //trovata corrispondenza con utente non registrato nel sistema!
                                    //unauthorized 401
                                    msg = "Not registered user!";
                                    db.NewErrorLog("result not registered : " + result, DateTime.Now);
                                    httpStatusCode = HttpStatusCode.Unauthorized;
                                }
                            }
                            else
                            {
                                //result contiene l'errore incontrato
                                //unauthorized 401
                                msg = result;
                                db.NewErrorLog("no result : " + result, DateTime.Now);
                                httpStatusCode = HttpStatusCode.Unauthorized;
                            }
                        }
                    }
                }
                else
                {
                    db.NewErrorLog("ANOMALY-no data", DateTime.Now);
                }
            }
            catch (DatabaseException e)//DB exception
            {
                httpStatusCode = System.Net.HttpStatusCode.InternalServerError;
                db.NewErrorLog("ANOMALY-" + e.Message, DateTime.Now);
                msg = e.Mex;
            }
            catch (Exception e)
            {
                //in caso di errore la response diventa http 500
                httpStatusCode = System.Net.HttpStatusCode.InternalServerError;
                db.NewErrorLog("ANOMALY-" + e.Message, DateTime.Now);
                msg = e.Message;
            }
            finally
            {
                db.CloseConnection();

                response = Request.CreateResponse <String>(httpStatusCode, msg);

                //aggiungo un messaggio allo status code
                response.ReasonPhrase = msg;
                //db.NewErrorLog(httpStatusCode.ToString()+" MESSAGGIO : "+msg, DateTime.Now);
            }

            return(response);
        }