2017-08-26 23 views
0

画像を画像に含めるときに、データベースに新しいオブジェクトを作成する際に問題が発生します。ajax MVCで画像をアップロード

マイモデル:

public Dog() 

    { 

    public int Id { get; set; } 
    public string Name { get; set; } 
    public string DogImageUrl { get; set; } 

    } 

私のHTMLコード:

@if (User.Identity.IsAuthenticated) 
    { 
      <h7>New Dog</h7> 
      <input id="dogName" type="text" placeholder="dog name" /> 

       <input type="file" name="file" style="width: 100%;" /> 

       <input id="createNewDog" type="button" value="Go" /> 


      </div> 
     </div> 
    } 

私のAjaxのポストコード: $( '#のaddNewDog')をクリックします(関数(E){

  var imgToUpload = $("input[name=file]").get(0).files[0]; 
     var data = { 
       "Name": $('#dogName').val(), 
       "DogImageUrl ": "nullForNow", 


      }; 
      var url = "@Url.Action("NewDog", "Home")"; 
      $.ajax({ 
       url: url, 
       data: { model: data, file: Request.File[imgToUpload] }, 
       cache: false, 
       type: "POST", 
       contentType: "multipart/form-data", 
       processData: false, 
       success: function (respone) { 
        alert(respone); 
        location.reload(); 
       }, 
       error: function (reponse) { 
        alert(reponse); 
       } 
      }); 
      e.stopPropagation(); 
     }); 

マイコン:

public ActionResult NewDog(Dog model, HttpPostedFileBase file) 
    { 


     using (var contex = new DogContext()) 
     { 
      if (User.Identity.IsAuthenticated) 
      { 

       if (file != null) 
       { 
        try 
        { 
         if (file.ContentType == "image/jpeg") 
         { 
          if (file.ContentLength < 500000) 
          { 
           string pic = System.IO.Path.GetFileName(file.FileName); 
           string path = System.IO.Path.Combine(
                 Server.MapPath("~/Content/GroupImages"), pic); 
           // file is uploaded 
           file.SaveAs(path); 
           model.DogImageUrl = path; 
          } 
         } 
        } 
        catch (Exception ex) 
        { 
         return Content(ex.ToString()); 
        } 
       } 

       contex.Dogs.Add(model); 
       contex.SaveChanges(); 
      } 
     } 

私のimgは常にnullになります。私はインターネット上のすべてを検索し、それを把握しませんでした。 私のデータベースのPATHを自分のイメージに保存するのが目的です。

+0

1.クライアントのコンピュータから実際のパスを取得する可能性は低い - ブラウザはしばしば実際のパスを難読化する。 2.デバッグコンソールにスクリプトエラーがありますか? 3. [jQuery Ajaxファイルのアップロード](https://stackoverflow.com/questions/2320069/jquery-ajax-file-upload)およびその他の[MVC固有](https://stackoverflow.com/questions/29293637/)を参照してください。どのように追加することができますか?モデル全体をフォームデータに変換し、それをmvcで入手することができます。 – Jasen

+0

@Jasenは、サーバーからのパスを保存し、ユーザーがイメージをアップロードし、それを自分のサーバーに保存し、 "DogImageUrl"でそのパスを取得したいと考えています。 –

+0

2番目のリンクは、 。 – Jasen

答えて

0

まず、あなたのモデルを定義

public class DogUpload 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public HttpPostedFileBase Image { get; set; } 
} 

次に、あなたの行動

[HttpPost] 
public ActionResult Upload(DogUpload model) 
{ 
    var image = model.Image; 
    var name = model.Name; 
    var fileName = image.FileName; 

    var path = Server.MapPath("~/Content/GroupImages" + fileName); 
    image.SaveAs(path); 

    // create valid url to dog image 
    // create Dog and save to database 
    var dog = dbContext.Dogs.FirstOrDefault(d => d.Id == model.Id); 
    if (dog == null) 
    { 
     dog = new Dog 
     { 
      Name = model.Name, 
      DogImageUrl = url 
     }; 
     ... 
    } 

    return Json(new { message = "Created", id = dog.Id, name = dog.Name, url = dog.DogImageUrl }); 
} 

あなたのビュー

@using(Html.BeginForm("Upload", "Dog", FormMethod.Post, 
     new { id="dogForm", enctype="multipart/form-data" }) 
{ 
    <input type="file" name="Image" /> 
    <input type="text" name="Name" /> 
    <button type="submit">Submit</button> 
} 

AJAX

$("#dogForm").on("submit", function(e) { 
    e.preventDefault(); 

    var form = $(this); 
    var formData = new FormData(form.get(0)); 

    $.ajax({ 
     url: form.attr("action"), 
     method: form.attr("method"), 
     data: formData, 
     processData: false, 
     contentType: false 
    }) 
    .then(function(result) { 
     console.log(result); 
    }); 
}); 
+0

あなたの答えはありがたいですが、私の目標はモデルを更新したときのイメージ自体ではなく、犬のモデルにイメージパスを保存することです( –

+0

「私のimgは常にnullになります」)。いつもヌル? – Jasen

+0

私がアップロードしようとしているもの:/それはコントローラのヌルに来る –

関連する問題