2017-02-01 4 views
0

Ich versuche Besuchern den Upload von Bildern über meine MVC-Website zu ermöglichen. Der Benutzer soll die Bilder hochladen und dann in einer anderen Aktion im Controller alle Bilder abrufen und anzeigen.MVC-Feldtyp für hochgeladene Datei

Mein Modell hat dieses Feld:

public virtual byte[] FileData{ get; set; } 

Und meine Datenbanktabelle hat diese Spalte:

FileData varbinary 

Aus meiner Sicht habe ich folgendes:

<div class="form-group"> 
    @Html.LabelFor(model => model.FileData, htmlAttributes: new { @class = "control-label col-md-2" }) 
    <div class="col-md-10"> 
      @Html.TextBoxFor(model => model.FileData, new { type = "file" }) 
      @Html.ValidationMessageFor(model => model.FileData) 
    </div> 
</div> 

Als ich einreichen das Formular bekomme ich diesen Fehler:

System.FormatException: The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters.

Meine Fragen sind:

die Datenbanktabelle Datentyp für die FileData Spalte korrekt ist?

Ist der Modelltyp für das Feld FileData korrekt?

Was ist die Ursache der Ausnahme?

+0

Es gibt ein [beantworten hier] (http://stackoverflow.com/questions/15106190/uploading-files-into-database-with-asp-net- mvc). Wie für Ihre Ausnahme: Was ist die Ursache der Ausnahme? Wie sieht die vollständige Stapelverfolgung aus? – Jasen

+1

Verwenden Sie ein Ansichtsmodell mit einer Eigenschaft 'HttpPosedFileBase File', um an -' @ Html.TextBoxFor (m => m.File, new {type = "file})' zu binden und den Eingabestrom in das 'byte 'des Datenmodells einzulesen. ] FileData' Eigenschaft. –

Antwort

0

Ich verwende normalerweise HTML-Eingabe des Dateityps anstelle des Rasiermesserhelfers.

<input type="file" id="imageInput" name="imageInput" value="" multiple="multiple" /> 

dann in der Post Aktionsmethode, muss Ihre Aktion erwähnt

<form enctype="multipart/form-data" action="/controller/SaveImage" method="post"> 

Die Controller-Aktion die Datei akzeptieren sollten wir so senden:

0

Sie hinzufügen können zu Ihrem Modell:

public HttpPostedFileBase FileData{ get; set; } 

Und dann in der Ansicht, dass es wie verwenden:

@Html.TextBoxFor(model => model.FileData, new { type = "file" }) 
Verwandte Themen