Ввод не является допустимой строкой Base-64, поскольку она содержит неосновной 64-символ? - PullRequest
20 голосов
/ 26 февраля 2011

У меня есть форма, где пользователь может загрузить файл в раздел загрузки сайтов.Однако, когда форма отправлена, я получаю эту ошибку, без запроса на метод действия.

"Входные данные не являются допустимой строкой Base-64, поскольку она содержит неосновной 64-символ, болеечем два символа заполнения, или непробельный символ среди символов заполнения. "

Код:

[HttpPost]
    [Authorize]
    public ActionResult Create(Download dl, HttpPostedFileBase DownloadFile)
    {

И

@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>

Любые предложения?

Спасибо, Алекс.

Ответы [ 3 ]

30 голосов
/ 26 февраля 2011

Хорошо, я наконец понял это. Все это было вызвано тем, что я назвал входной файл в форме таким же, как поле моего файла моделей, так что связыватель модели взял это и попытался привязать опубликованный файл непосредственно к двоичному файлу. свойство, которое вызывало исключение, поскольку строка не была двоичной.

Итак, чтобы исправить это, я просто добавил это в метод создания действия:

[HttpPost]
    [Authorize]
    public ActionResult Create([Bind(Exclude = "DownloadFile")] Download dl, HttpPostedFileBase DownloadFile)
    {

Указав связующему модели исключить поле, он решил проблему.

Спасибо, Алекс.

РЕДАКТИРОВАТЬ: Это также может быть легко решено с помощью моделей представления

4 голосов
/ 21 февраля 2012

Алекс, вы частично правы в своей оценке. Причина сбоя, когда у вас есть свойство с тем же именем в вашей модели, что и имя входного объекта в форме, связано с тем, что DataType свойства с соответствующим именем в вашей модели не System.Web. HttpPostedFileWrapper - тип данных, с которым двоичное связующее будет пытаться выполнить связывание.

Исключение вашего свойства с использованием атрибута Bind и последующее извлечение файла из коллекции Request.Files, как вы продемонстрировали, может работать, но может быть более элегантно позволить связующему делать свое дело (при условии, что тип данных соответствует Я упоминал выше), и тогда вы можете просто получить доступ к файлу прямо из свойства вашей модели

1 голос
/ 26 февраля 2011

Вы можете попробовать удалить HttpPostedFileBase из метода контроллера и использовать Request.Files [0] и посмотреть, имеет ли это значение.

Честно говоря, хотя я не понимаю, почему это не получится, если в вашей модели нет чего-то вызывающего.

Кроме того, здесь нет необходимости выбирать, но DownloadFile должен быть загружен в вашей форме и в вашем методе контроллера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...