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

时间:2015-11-12 14:14:02

标签: asp.net-mvc base64 image-upload

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

“输入不是有效的Base-64字符串,因为它包含非基本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>
}

更新:

这是创建控制器:

    [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);
    }

2 个答案:

答案 0 :(得分:4)

你真的没有在这里提供足够的信息,但我会根据错误信息进行猜测。

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

您已将文件输入绑定到#include <stdarg.h> #include <wchar.h> void GetWideMatches ( const wchar_t * str, const wchar_t * format, ... ) { va_list args; va_start (args, format); vswscanf (str, format, args); va_end (args); } int main () { int val; wchar_t buf[100]; GetWideMatches ( L"99 bottles of beer on the wall", L" %d %ls ", &val, buf); wprintf (L"Product: %ls\nQuantity: %d\n", buf, val); return 0; } ,我的猜测是Image是模型上的字节数组。您不能直接发布到字节数组。您需要绑定到Image类型的属性,然后您可以从中读取字节数组并将其设置在您的其他属性上。

答案 1 :(得分:0)

public HttpPostedFileBase image { get; set; }在模型上使用 <input type="file" name="image" />在您的View名称道具上使用它应该与HttpPostedFileBase图片相同,并在post方法上捕获它,并将其转换为字节后