如何在Asp.net MVC 5应用程序中上传文件

时间:2016-12-08 12:39:31

标签: c# asp.net asp.net-mvc asp.net-mvc-4 httppostedfilebase

我正在尝试在我的应用程序中上传文件。我在我的模型和HttpPostedFileBase数组中使用了byte[],但在运行我的应用程序时不知道为什么会出现此错误。下面我还上传了运行应用时显示的错误的image

显示的错误是:

  

在模型生成期间检测到一个或多个验证错误:

     

AdSite.Models.HttpPostedFileBase :: EntityType 'HttpPostedFileBase' has no key defined. Define the key for this EntityType.   HttpPostedFileBases:EntityType:EntitySet'HttpPostedFileBases'基于类型'HttpPostedFileBase',没有定义键。

Error screenshot

我的模特:

public class Album
{
    [Key]
    public int Id { get; set; }
    public string ProductTitle { get; set; }
    public string Description { get; set; }
    public string ImageFileName { get; set; }
    public int ImageSize { get; set; }
    public byte[] ImageData { get; set; }
    [Required(ErrorMessage="Please select image file.")]
    public HttpPostedFileBase File { get; set; }        
}

我的控制器代码:

public ActionResult Upload([Bind(Include = "Id,ProductTitle,Description,ImageFileName,ImageData,File,ImageSize")]Album album)
{
    if (ModelState.IsValid)
    {
        //  album.ImageFileName = album.File.FileName;
        // album.ImageSize = album.File.ContentLength;

        byte[] data = new byte[album.File.InputStream.Length];
        album.File.InputStream.Read(data, 0, data.Length);
        album.ImageData = data;

        var db = new AlbumContext();
        db.Albums.Add(album);
        db.SaveChanges();

        return RedirectToAction("Index");
    }
    return View(album);
}

我的观看代码:

<div class="form-group">
    <label class="control-label col-md-2">Select Image:</label> 
    <div class="col-md-10">
        @Html.TextBoxFor(model=>model.File, new { type="file"})
        @Html.ValidationMessage("CustomError")
    </div>
</div>

1 个答案:

答案 0 :(得分:0)

这就是您希望使用模型检索数据然后将其转换为DTO对象的原因。

错误是因为您尝试将System.Web.HttpPostedFileBase类存储到数据库中。这不是你要控制的类,它不是为了直接存储在数据库中而创建的。在这种情况下,HttpPostedFileBase是您的“模特”。

创建另一个对象并将其绑定到DbContext以存储数据库中文件所需的内容。不要只是把物体扔在那里。