ASP MVC 图像上传错误“输入不是有效的 Base-64 字符串”

Kha*_*775 2 asp.net-mvc base64 image-upload

我有这个表格,我正在尝试上传图像。当我点击提交按钮时,出现以下错误:

“输入不是有效的 Base-64 字符串,因为它包含非 Base-64 字符、两个以上的填充字符,或者填充字符中包含非法字符。”

永远无法到达控制器,因为我上传图像后就会发生错误。我不知道该怎么办。任何帮助表示赞赏!

@using (Html.BeginForm("Create", "Create", FormMethod.Post, new { enctype = "multipart/form-data"})) 
{
    @Html.AntiForgeryToken()

    <div class="form-group">
        <div class="col-md-10">
            @Html.LabelFor(model => model.ComponentModel.Image, htmlAttributes: new {@class = "control-label col-md-2"})
            <a class="btn" href="javascript:;">
                Choose File...
                <input type="file" name="Image" Size="40" style="position: absolute; z-index: 2; top: 0; left: 0; filter: alpha(opacity=0); opacity: 0; background-color: transparent; color: transparent"
                       onchange='$("#upload-file-info").html($(this).val());'/>
            </a>
            <span class="label label-info" id="upload-file-info"></span>
        </div>
    </div>

    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Create" class="btn btn-default"/>
        </div>
    </div>
}
Run Code Online (Sandbox Code Playgroud)

更新:

这是创建控制器:

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Create(Component component, HttpPostedFileBase image = null)
    {
        if (ModelState.IsValid)
        {
            if (image != null)
            {
                component.Image = new byte[image.ContentLength];
                image.InputStream.Read(component.Image, 0, image.ContentLength);
            }
            componentRepository.InsertComponent(component);
            componentRepository.Save();
            return RedirectToAction("Index", "Home");
        }
        return RedirectToAction("Index", component);
    }
Run Code Online (Sandbox Code Playgroud)

Chr*_*att 5

您确实没有在这里提供足够的信息,但我将根据错误消息进行大胆猜测。

你说它没有击中你的控制器,但它必须击中你的控制器。该错误来自 ASP.NET,因此它会返回到服务器。

您已将文件输入绑定到Image,我的猜测是Image您模型上的字节数组。您不能直接发布到字节数组。您需要绑定到 type 的属性HttpPostedFileBase,然后您可以从中读取字节数组并将其设置到其他属性上。

  • 这是因为错误是由 modelbinder 在实际到达操作代码之前生成的。因为“Component”上有一个名为“Image”的属性,所以模型绑定器尝试在那里绑定数据,这就是导致错误的原因。事实上,你有另一个名为“image”的参数永远不会发挥作用。您需要为输入(和参数)使用与模型上的任何名称不同的名称。 (2认同)
  • 如果“模型”是您的实体,则不应在其上具有 HttpPostedFileBase 属性。使用视图模型,或者像您之前尝试的那样将其绑定到附加参数。但是,是的,一旦您拥有发布的文件,您需要从流中读取字节并用它在模型上设置适当的属性。 (2认同)