使用asp.net mvc在数据库中存储图像

时间:2016-04-11 10:18:24

标签: c# asp.net-mvc file-upload

我在View中有这段代码:

<div class="form-group">
   <label for="imageFile">Image</label>
   <input type="image" name="imageFile" class="file-loading form-control input-files" accept=".png,.jpg,.jpeg,.gif,.tif" />
   @Html.ValidationMessageFor(model => model.image)
</div>

控制器:

public ActionResult PostIdea(PostIdeaViewModel model, HttpPostedFileBase imageFile) {
   if (ModelState.IsValid) {
      var newProject = db.Projects.Create();
      if (imageFile != null && imageFile.ContentLength > 0) {
         newProject.image = new byte[imageFile.ContentLength];
         imageFile.InputStream.Read(newProject.image, 0, imageFile.ContentLength);
      } 
   } 
}

型号:

[Display(Name = "Image")]
public HttpPostedFileBase image { get; set; }

一切似乎都适合我,但控制器收到的图像为空。代码有问题吗?

编辑:使用enctype =&#34; multipart / form-data&#34;和                     @ Html.TextBoxFor(m =&gt; m.image,new {type =&#34; file&#34;}) 为我工作。

3 个答案:

答案 0 :(得分:0)

您的表单必须包含enctype =&#34; multipart / form-data&#34;

答案 1 :(得分:0)

type =“image”仅将该图像定义为提交按钮,而不是作为可以发送到服务器的输入。

您应该为案例使用输入类型文件

答案 2 :(得分:0)

我认为你应该使用输入类型&#34; file&#34;。并添加输入类型&#34;提交&#34;。

我的观点:

@using (Html.BeginForm("TestImage", "Test", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <div class="form-group">
        <label for="imageFile">Image</label>
        <input type="file" name="imageFile" class="file-loading form-control input-files" accept=".png,.jpg,.jpeg,.gif,.tif" />
    </div>
    <button type="submit">Go !</button>
}

我的控制器:

        [HttpPost]
    public ActionResult TestImage(Models.Answer model)
    {
        var imageFiles = Request.Files;

        if (imageFiles != null && imageFiles.Count > 0)
        {
            HttpPostedFileBase imageFile = imageFiles[0];
            if (imageFile.ContentLength > 0)
            {
                var image = new byte[imageFile.ContentLength];
                imageFile.InputStream.Read(image, 0, imageFile.ContentLength);
            }
        }

        return View();
    }