MVC - 如何从html表单上传文件?

时间:2012-07-22 21:49:51

标签: asp.net-mvc file-upload

我正在尝试允许用户通过html表单上传图像,我想将其作为byte []存储在我的模型中。(将存储在db中)除非我应该使用其他东西而不是字节[]?

这就是我的表格

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)

<fieldset>
    <legend>ImageUploadModel</legend>

    @Html.DisplayFor(model => model.Image)
   <input type="file" name="Image" id="Image" accept="image/*" />

    @Html.DisplayFor(model => model.Caption)
    @Html.EditorFor(model => model.Caption)
    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset>

}

这是我的控制器现在的样子

[HttpPost]
    public ActionResult Create(ImageUploadModel model)
    {
           // do stuff

        return View();
    }

这就是我的ImageUploadModel的样子

public class ImageUploadModel
{
    public Guid UploadedBy { get; set; }

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

    [Display(Name = "Image Caption")]
    public string Caption { get; set; }
}

当我尝试上传文件时,我收到有关不是有效base64string的错误。

在MVC4 / C#

中将上传文件作为byte []的正确方法是什么?

由于

2 个答案:

答案 0 :(得分:1)

像这样更改您的表单标签(您可以将YourControllerName替换为您的实际控制器名称)

@using (Html.BeginForm("Create", "YourControllerName", 
            FormMethod.Post, new { enctype = "multipart/form-data" }))
{
  <input type="file" name="Image" />
  <input type="file" name="Image" id="Image" 
  //your other form elements also
}

和 将您的POST操作更改为接受HttpPostedFileBase的实例以及input file元素的同名

[HttpPost]
public ActionResult Create(HttpPostedFileBase Image)
{
       // do stuff

    return View();
}

答案 1 :(得分:0)

您需要将其更改为HttpPostedFileBase

相关问题