Wie ich meine mache, ist so ziemlich wie oben. Ich zeige Ihnen meinen Code und wie man ihn mit einer MYSSQL-Datenbank verwendet ...
Dokumententabelle in DB -
int Id (PK), Zeichenfolge URL, Zeichenfolge Beschreibung, CreatedBy, TenancyId DateUploaded
Die obige Code-ID ist der Primärschlüssel, die URL ist der Name der Datei (mit dem Dateityp am Ende), die Dateibeschreibung, die in der Dokumentansicht ausgegeben werden soll. CreatedBy ist derjenige, der die Datei hochgeladen hat, tenancyId, dateUploaded
In der Ansicht müssen Sie den Enctype definieren, sonst funktioniert er nicht richtig.
@using (Html.BeginForm("Upload", "Document", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div class="input-group">
<label for="file">Upload a document:</label>
<input type="file" name="file" id="file" />
</div>
}
Der obige Code gibt Ihnen die Schaltfläche zum Durchsuchen. In meinem Projekt habe ich eine Klasse namens IsValidImage, die nur überprüft, ob die Dateigröße unter Ihrer angegebenen maximalen Größe liegt. Überprüft, ob es sich um eine IMG-Datei handelt. Dies ist alles in einer Klassen-Bool-Funktion. Wenn also true, wird true zurückgegeben.
public static bool IsValidImage(HttpPostedFileBase file, double maxFileSize, ModelState ms )
{
// make sur the file isnt null.
if( file == null )
return false;
// the param I normally set maxFileSize is 10MB 10 * 1024 * 1024 = 10485760 bytes converted is 10mb
var max = maxFileSize * 1024 * 1024;
// check if the filesize is above our defined MAX size.
if( file.ContentLength > max )
return false;
try
{
// define our allowed image formats
var allowedFormats = new[] { ImageFormat.Jpeg, ImageFormat.Png, ImageFormat.Gif, ImageFormat.Bmp };
// Creates an Image from the specified data stream.
using (var img = Image.FromStream(file.InputStream))
{
// Return true if the image format is allowed
return allowedFormats.Contains(img.RawFormat);
}
}
catch( Exception ex )
{
ms.AddModelError( "", ex.Message );
}
return false;
}
Also in der Steuerung:
if (!Code.Picture.IsValidUpload(model.File, 10, true))
{
return View(model);
}
// Set the file name up... Being random guid, and then todays time in ticks. Then add the file extension
// to the end of the file name
var dbPath = Guid.NewGuid().ToString() + DateTime.UtcNow.Ticks + Path.GetExtension(model.File.FileName);
// Combine the two paths together being the location on the server to store it
// then the actual file name and extension.
var path = Path.Combine(Server.MapPath("~/Uploads/Documents/"), dbPath);
// set variable as Parent directory I do this to make sure the path exists if not
// I will create the directory.
var directoryInfo = new FileInfo(path).Directory;
if (directoryInfo != null)
directoryInfo.Create();
// save the document in the combined path.
model.File.SaveAs(path);
// then add the data to the database
_db.Documents.Add(new Document
{
TenancyId = model.SelectedTenancy,
FileUrl = dbPath,
FileDescription = model.Description,
CreatedBy = loggedInAs,
CreatedDate = DateTime.UtcNow,
UpdatedDate = null,
CanTenantView = true
});
_db.SaveChanges();
model.Successfull = true;