输入不是有效的Base-64字符串,因为它包含非基本64字符?

Ale*_*nor 20 c# file-upload asp.net-mvc-3

我有一个表单,用户可以将文件上传到网站下载部分.但是,当提交表单时,我收到此错误,而没有请求进入操作方法.

"输入不是有效的Base-64字符串,因为它包含非基本64个字符,两个以上的填充字符或填充字符中的非空白字符."

码:

[HttpPost]
    [Authorize]
    public ActionResult Create(Download dl, HttpPostedFileBase DownloadFile)
    {
Run Code Online (Sandbox Code Playgroud)

@model Models.Download

@{
    ViewBag.Title = "Add Download";
}

<h3>Add Download</h3>

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

    <div class="editor-label">Download File</div>
    <div class="editor-field">
        <input name="DownloadFile" id="DownloadFile" type="file" />
        @Html.ValidationMessage("DownloadFile");
    </div>

    <div class="editor-label">@Html.LabelFor(model => model.Downloads)</div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Downloads)
        @Html.ValidationMessageFor(model => model.Downloads)
    </div>

    <div class="editor-label">@Html.LabelFor(model => model.DownloadDate)</div>
    <div class="editor-field">
        @Html.EditorFor(model => model.DownloadDate)
        @Html.ValidationMessageFor(model => model.DownloadDate)
    </div>

    <div class="display-field"><input type="submit" value="Add" /></div>
}

<div>@Html.ActionLink("Back To Downloads", "Index")</div>
Run Code Online (Sandbox Code Playgroud)

任何sugestions?

谢谢,亚历克斯.

Ale*_*nor 30

好吧我终于弄清楚了,这都是因为我在表单上命名文件输入与我的模型文件字段相同,所以模型绑定器正在拾取它并尝试将发布的文件直接绑定到二进制属性因为字符串不是二进制而抛出异常.

所以要修复它我只是将它添加到我的create action方法:

[HttpPost]
    [Authorize]
    public ActionResult Create([Bind(Exclude = "DownloadFile")] Download dl, HttpPostedFileBase DownloadFile)
    {
Run Code Online (Sandbox Code Playgroud)

通过告诉模型绑定器排除字段,它解决了问题.

谢谢,亚历克斯.

编辑:这也可以通过使用视图模型轻松解决

  • 当然,我认为如果绑定器确定属性的类型并将文件转换为字节数组将是一件好事. (2认同)