0

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

这就是我的表格的样子

@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# 中将上传文件作为字节 [] 获取的正确方法是什么

谢谢

4

2 回答 2

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();
}
于 2012-07-22T21:58:57.650 回答
0

您需要将其更改为HttpPostedFileBase.

于 2012-07-22T21:51:28.253 回答