【问题标题】:MVC4 Image Upload Using Entity Framework 5 Code First使用实体框架 5 代码优先的 MVC4 图像上传
【发布时间】:2015-03-27 11:33:51
【问题描述】:

我是 MVC 的初学者,正在尝试将图像添加到数据库中,然后在前端检索它。

我已经添加了我的班级:

using System;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Web.Mvc;


namespace TestProject.Data
{
    public partial class UpcomingEvent
    {
        public UpcomingEvent()
        {
            EventDate = DateTime.Now;
            DateTimeStamp = DateTime.Now;
            Cancelled = false;
        }
    [Key]
    public int EventID { get; set; }
    public DateTime EventDate { get; set; }
    public string Title { get; set; }
    public string Blurb { get; set; }
    public string Body { get; set; }
    public byte[] EventImage { get; set; }
    public DateTime DateTimeStamp { get; set; }
    public bool Cancelled { get; set; }

}

}

然后使用实体框架创建了一个具有读/写操作的控制器。在创建/编辑等中,除了图像之外的所有字段都显示。

我需要添加什么到我的控制器或视图中才能将图像与每个条目一起发送到数据库?

【问题讨论】:

    标签: c# asp.net-mvc entity-framework asp.net-mvc-4 ef-code-first


    【解决方案1】:

    以下是我们为保险代理机构提供的网站之一的工作示例。我将徽标存储在目录中。我还在调整徽标的大小,并使用 ImageResizer(可以使用 Package Manager 安装)创建移动版本。虽然这不是必需的,但它是一个不错的工具,尤其是在接受来自最终用户的上传时。

    查看:

    @using (Html.BeginForm("Upload","LogoController", FormMethod.Post, new { enctype = "multipart/form-data" }))
    {
    
        <div class="form-horizontal">
            <div class="control-group">
                <label>
                    Upload A Logo</label>
                <div class="controls">
                    <input type="file" name="logo" />
                </div>
            </div>
        </div>
        <p><input type="submit" name="Upload" value="Upload" class="button" />
        </p>
    }
    

    控制器:

        [HttpPost]
        public ActionResult Upload(HttpPostedFileBase logo)
        {
            SaveLogos(logo);
            return View();
        }
    
        private void SaveLogos(HttpPostedFileBase logo)
        {
            if (logo != null && logo.ContentLength > 0)
            {
                var ext = Path.GetExtension(logo.FileName);
    
                var path = Server.MapPath("~/Content/Images");
                var full = Path.Combine(path, "logo.png");
    
                path = Path.Combine(path, "Mobile");
                var mobile = Path.Combine(path, "logo.png");
    
                var tmp = Path.GetTempFileName() + "." + ext;
                try
                {
    
                    if (!Directory.Exists(path))
                    {
                        Directory.CreateDirectory(path);
                    }
    
                    if (System.IO.File.Exists(full))
                    {
                        System.IO.File.Move(full, full.Replace(".png", DateTime.Now.ToString("yyyyMMdd_hhmmss") + ".png"));
                    }
    
                    if (System.IO.File.Exists(mobile))
                    {
                        System.IO.File.Move(mobile, mobile.Replace(".png", DateTime.Now.ToString("yyyyMMdd_hhmmss") + ".png"));
                    }
                    // convert to png
                    logo.SaveAs(tmp);
    
                    var job = new ImageResizer.ImageJob(tmp, full,
                        new ImageResizer.ResizeSettings("width=460;height=102;format=png;mode=pad"));
                    job.Build();
    
                    // create mobile image
                    job = new ImageResizer.ImageJob(tmp, mobile,
                        new ImageResizer.ResizeSettings("width=190;height=44;format=png;mode=pad"));
                    job.Build();
    
                }
                catch (Exception e)
                {
                    Logging.LogError(e, ControllerContext);
                }
                finally
                {
                    System.IO.File.Delete(tmp);
                }
    
            }
        }
    

    将其存储到 EF 将是获取图像的字节,可能对它们进行编码(可能是 base64),然后将结果存储到您的对象中。 CodeProject Article 提供了将文件存储到 varbinary(MAX) 字段的示例。

    最后,如果我没有提供有关在您的数据库中存储图像的警告,那我将是疏忽大意。如果图像大于 1MB,Microsoft 建议不要这样做。请参阅Entity Framework Column Type for Base64 String 进行类似讨论。

    【讨论】:

      【解决方案2】:

      你可以先上网搜索一下。

      看看这个页面: http://www.mikesdotnetting.com/article/125/asp-net-mvc-uploading-and-downloading-files

      【讨论】:

      • 这是一个可怕的例子,那个例子中的实体框架在哪里,或者使用 MVC 模型?
      猜你喜欢
      • 1970-01-01
      • 2012-02-26
      • 2012-10-11
      • 1970-01-01
      • 1970-01-01
      • 2018-07-07
      • 2017-09-01
      • 2014-05-23
      • 1970-01-01
      相关资源
      最近更新 更多