In this article of ASP.NET MVC we will learn about Validation File Uploading so Let's start.
Firstly create Model Class, In my case there are two classes like EmpModel and FileDetailsModel
EmpModel Class:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace File_Upload.Models
{
public class EmpModel
{
[Required]
[DataType(DataType.Upload)]
[Display(Name = "Select File")]
public byte files { get; set; }
}
}
FileDetailsModel Class:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace File_Upload.Models
{
public class FileDetailsModel
{
public int Id { get; set; }
[Display(Name = "Uploaded File")]
public String FileName { get; set; }
public byte[] FileContent { get; set; }
}
}
Then create Controller, in my case i have created HomeController but you can give any name ,its depend upon you.
using File_Upload.Models;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Mvc;
using Dapper;
namespace File_Upload.Controllers
{
public class HomeController : Controller
{
public ActionResult FileUpload()
{
return View();
}
[HttpPost]
public ActionResult FileUpload(HttpPostedFileBase files)
{
String FileExt = Path.GetExtension(files.FileName).ToUpper();
if (FileExt == ".PDF" || FileExt == ".xls")
{
Stream str = files.InputStream;
BinaryReader Br = new BinaryReader(str);
Byte[] FileDet = Br.ReadBytes((Int32)str.Length);
FileDetailsModel Fd = new Models.FileDetailsModel();
Fd.FileName = files.FileName;
Fd.FileContent = FileDet;
SaveFileDetails(Fd);
return RedirectToAction("FileUpload");
}
else if (files.ContentLength > 3)
{
ViewBag.length = "File size should be 3 kb";
return View();
}
else
{
ViewBag.FileStatus = "Invalid file format.";
return View();
}
return View();
}
[HttpGet]
public FileResult DownLoadFile(int id)
{
List<FileDetailsModel> ObjFiles = GetFileList();
var FileById = (from FC in ObjFiles
where FC.Id.Equals(id)
select new { FC.FileName, FC.FileContent }).ToList().FirstOrDefault();
return File(FileById.FileContent, "application/pdf", FileById.FileName);
}
[HttpGet]
public PartialViewResult FileDetails()
{
List<FileDetailsModel> DetList = GetFileList();
ViewBag.msg = "error";
return PartialView("FileDetails", DetList);
}
private List<FileDetailsModel> GetFileList()
{
List<FileDetailsModel> DetList = new List<FileDetailsModel>();
DbConnection();
con.Open();
DetList = SqlMapper.Query<FileDetailsModel>(con, "GetFileDetails", commandType: CommandType.StoredProcedure).ToList();
con.Close();
return DetList;
}
protected void Insertion(object sender, EventArgs e, HttpPostedFileBase files)
{
String FileExt = Path.GetExtension(files.FileName).ToUpper();
if (FileExt == ".PDF" || FileExt == ".xls")
{
Stream str = files.InputStream;
BinaryReader Br = new BinaryReader(str);
Byte[] FileDet = Br.ReadBytes((Int32)str.Length);
FileDetailsModel Fd = new Models.FileDetailsModel();
Fd.FileName = files.FileName;
Fd.FileContent = FileDet;
SaveFileDetails(Fd);
}
else if (files.ContentLength > 3)
{
ViewBag.length = "File size should be 3 kb";
}
else
{
ViewBag.FileStatus = "Invalid file format.";
}
}
private void SaveFileDetails(FileDetailsModel objDet)
{
DynamicParameters Parm = new DynamicParameters();
Parm.Add("@FileName", objDet.FileName);
Parm.Add("@FileContent", objDet.FileContent);
DbConnection();
con.Open();
con.Execute("AddFileDetails", Parm, commandType: System.Data.CommandType.StoredProcedure);
con.Close();
}
private SqlConnection con;
private string constr;
private void DbConnection()
{
constr = ConfigurationManager.ConnectionStrings["dbcon"].ToString();
con = new SqlConnection(constr);
}
}
}
Now Let's create Views , there are two Views FileDetails.cshtml and FileUpload.cshtml
FileDetails.cshtml:
@model IEnumerable<File_Upload.Models.FileDetailsModel>
@{
ViewBag.Title = "FileDetails";
}
<table class="table table-bordered table-responsive table-hover">
<tr>
<th class="col-md-4">
@Html.DisplayNameFor(model => model.FileName)
</th>
<th class="col-md-2"></th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Id)
</td>
<td>
@Html.DisplayFor(modelItem => item.FileName)
</td>
<td>
@Html.ActionLink("Download", "DownLoadFile", new { id = item.Id })
</td>
</tr>
}
</table>
FileUpload.cshtml:
@model File_Upload.Models.EmpModel
@{
ViewBag.Title = "FileUpload";
}
@using (Html.BeginForm("FileUpload", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.files, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.TextBoxFor(model => model.files, "", new { @type = "file", @multiple = "multiple" })
@Html.ValidationMessageFor(model => model.files, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Upload" class="btn btn-primary" />
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10 text-success">
@ViewBag.FileStatus
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10 text-success">
@ViewBag.length
</div>
</div>
<div class="form-group">
<div class="col-md-8">
@Html.Action("FileDetails", "Home")
</div>
</div>
</div>
}
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
Now in the end make connection of sql server:
Goto Server Explorer in Visual Studio then Add Connection => Give a server name (Open Sql Server and copy Server Name and paste on Add Connection dialog box under Server Name) => Select Database => Click Ok => Right Click on your connection and select Properties => On Bottom right you will see Connection String Label and its connection so copy connection then go to
Web.config file add a code:
<connectionStrings>
<add name="dbcon" connectionString="Paste it here which you copy" providerName="System.Data.SqlClient"/>
</connectionStrings>
In the end build your Solution ( Ctrl + Shift + B) and run your project.
Comments
Post a Comment