2017-11-03 16 views
0

こんにちは、私はasp.netアイデンティティを使用して登録機能を実装しようとします。asp.netのHttpPostedFileBaseオブジェクトを渡すアイデンティティアクションメソッドとface apiで検証

私の必要なプロパティの1つは、私が最後に私がfaceServiceClient.DetectAsync() azure face apiメソッドを呼び出すアクションメソッドの引数として渡す新しいユーザーの写真です。

<input type='file'>を使用して写真をつかみ、次に登録アクションのIDのアカウントコントローラで、HttpPostedFileBase objectを使用して読み取ります。

問題は、最初の引数としてfaceServiceClient.DetectAsync()ニーズストリームオブジェクトまたは文字列(IMAGEPATH)が、私の場合、私はストリームオブジェクトまたは

HttpPostedFileBaseがない画像のパスを与えることができますどのようにそれを把握するカントイメージパスを取得しますが、イメージを取得するにはこのタイプのオブジェクトが必要です。その後、

と私は引数としてhttpPostedFilebase object.InputStreamを渡すためにしようとした場合でも、私は

アカウント・コントローラ

[HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> Register([Bind(Exclude = "UserPhoto")]RegisterViewModel model, HttpPostedFileBase userPhoto) 
    { 
     if ((userPhoto==null) || (userPhoto.ContentLength <= 0)) 
     { 
      ModelState.AddModelError("error", @"Please Select a profile picture"); 
     } 

     if (ModelState.IsValid) 
     { 
      var faceApiresult = await new FaceRecognitionController().GetDetectedFaces(userPhoto); 

      if (!faceApiresult) 
      { 
       ModelState.AddModelError("error", @"Your picture does not include your face"); 
       return RedirectToAction("Index", "Home"); 
      } 



      var user = new ApplicationUser 
       { 
        UserName = model.Email, 
        Email = model.Email, 
        UName = model.Username, 
        UserPhoto = model.UserPhoto 
       }; 

       var result = await UserManager.CreateAsync(user, model.Password); 
       if (result.Succeeded) 
       { 
        await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false); 

       // For more information on how to enable account confirmation and password reset please visit https://go.microsoft.com/fwlink/?LinkID=320771 
       // Send an email with this link 
       // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id); 
       // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme); 
       // await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>"); 


        return RedirectToAction("Index", "Home"); 
       } 
       AddErrors(result); 

     } 


     // If we got this far, something failed, redisplay form 
     return View(model); 
    } 

と私の具体的にはawait faceServiceClient.DetectAsyncコマンドライン

を指して休憩することにより、ヌル取得FaceRecognitionController

public class FaceRecognitionController : Controller 
{ 

    private static string ServiceKey = ConfigurationManager.AppSettings["FaceServiceKey"]; 
    private static string EndPoint = ConfigurationManager.AppSettings["FaceServiceEndPoint"]; 

      [HttpGet] 
      public async Task<dynamic> GetDetectedFaces(HttpPostedFile userPhoto) 
      { 
       var photo = new byte[userPhoto.ContentLength]; 

       if (userPhoto.ContentLength == 0) return false; 
       try 
       { 
        // Create Instance of Service Client by passing Servicekey as parameter in constructor 
        var faceServiceClient = new FaceServiceClient(ServiceKey); 
        var faces = await faceServiceClient.DetectAsync(userPhoto.InputStream, true, true, new FaceAttributeType[] { FaceAttributeType.Gender, FaceAttributeType.Age, FaceAttributeType.Smile, FaceAttributeType.Glasses }); 
        //check if find any faces 
        var results = faces.Length; 


        return results != 0; 
       } 
       catch (FaceAPIException) 
       { 
        //do exception work 
       } 

       return false; 
      } 

      } 
     } 

検証APIはどんな顔を見つけて、ちょうど登録

私はこれを克服することができる方法上の任意の考えを完了するために、trueを返す場合は、私はちょうどチェック見ることができるように?

答えて

0

私は私が後。だからをコード

var filePath = Path.GetTempFileName(); 

の行を使用して一時ファイルのパスを得ることができることを読まれるこの記事

https://docs.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads

を発見したいくつかのより多くの検索後に[OK]を私は正常にそれをアクションメソッドのパラメータとして追加してからfaceServiceClient.DetectAsync に追加し、最初の引数としてtis pathを使用して

関連する問題