Comment je fais le mien est à peu près comme ci-dessus je vais vous montrer mon code et comment l'utiliser avec une base de données MYSSQL ...
Table de documents en DB -
int Id (PK), chaîne URL, chaîne Description, CreatedBy, TenancyId DateUploaded
L'ID de code ci-dessus, étant la clé primaire, l'URL étant le nom du fichier (avec le type de fichier à la fin), la description du fichier à afficher dans la vue des documents, CreatedBy étant celui qui a téléchargé le fichier, tenancyId, dateUploaded
à l'intérieur de la vue, vous devez définir le type d'activation, sinon cela ne fonctionnera pas correctement.
@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>
}
Le code ci-dessus vous donnera le bouton Parcourir, puis dans mon projet, j'ai une classe essentiellement appelée IsValidImage qui vérifie simplement que la taille du fichier est inférieure à votre taille maximale spécifiée, vérifie s'il s'agit d'un fichier IMG, tout cela dans une fonction bool de classe. Donc, si vrai renvoie vrai.
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;
}
Donc, dans le contrôleur:
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;