Introduction
This article demonstrates how to upload a video file of up to 100MB and play dynamically using ASP.NET MVC 5. I will upload the video file to my project folder name (VideoFileUpload) and add its path in SQL Server database table. I will display all uploaded video files and their names.
Step 1. Create a database in the SQL Server of your choice.
CREATE TABLE [dbo].[VideoFiles](
[ID] [int] IDENTITY(1,1) NOT NULL,
NULL,
[FileSize] [int] NULL,
NULL,
CONSTRAINT [PK_VideoFiles] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
)
ON [PRIMARY]
GO
CREATE procedure [dbo].[spAddNewVideoFile]
(
@Name nvarchar(50),
@FileSize int,
@FilePath nvarchar(100)
)
as
begin
insert into VideoFiles (Name,FileSize,FilePath)
values (@Name,@FileSize,@FilePath)
end
CREATE procedure [dbo].[spGetAllVideoFile]
as
begin
select ID,Name,FileSize,FilePath from VideoFiles
end
![Database]()
Step 2. Open Visual Studio 2015. Create an empty ASP.NET Web Application project in it. As shown in the below screenshot, click on new project >> choose web template >> choose ASP.NET Web Application and give it a meaningful name to click ok.
Screenshot 1
![ASP.NET]()
Choose empty from ASP.NET Templates, select checkbox MVC, and click on OK, as shown in the image below.
Screenshot 2
![]()
Step 3. Double-click and open the web config file to add the database connection.
<connectionStrings>
<add name="DBCS" connectionString="data source=FARHAN\SQLEXPRESS; database=MvcDemo; integrated security=true;" />
</connectionStrings>
Add the below code in the web config file to allow a 100MB file to upload.
<httpRuntime executionTimeout="3600" maxRequestLength="104857600" enable="true" />
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="104857600" />
</requestFiltering>
</security>
</system.webServer>
Step 4. Right-click on Project Add select New Folder, and name it VideoFileUpload to upload all the audio files in that folder.
Step 5. Right-click on the Models folder, select Add, then select Class.
Screenshot for creating model class 1
![]()
A window will appear. Choose Class, give it the name VideoFiles, then click on Add.
Screenshot for creating model class 2
![]()
Write the class field and property as we have in the database table.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace MvcUploadVideoFile_Demo.Models
{
public class VideoFiles
{
public int ID { get; set; }
public string Name { get; set; }
public Nullable<int> FileSize { get; set; }
public string FilePath { get; set; }
}
}
Step 6. Right-click on the Controllers folder, select Add, then select Controller. HomeController.
Screenshot for creating controller 1
![]()
After clicking on controller a window will appear; choose MVC 5 Controller-Empty and click on Add.
Screenshot for creating controller 2
![]()
After that, another window will appear with DefaultController. Remember, don’t change the suffix name of the controller here. Click on Add and a Home Controller will be added in the Controllers folder.
Screenshot for creating controller 3
![]()
Add the following namespace
using MvcUploadVideoFile_Demo.Models;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.IO;
Create a UploadVideo action method with [HttpGet] in the controller. Write the following code to retrieve the data from the database table.
[HttpGet]
public ActionResult UploadVideo()
{
List<VideoFiles> videolist = new List<VideoFiles>();
string CS = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
using (SqlConnection con = new SqlConnection(CS))
{
SqlCommand cmd = new SqlCommand("spGetAllVideoFile", con);
cmd.CommandType = CommandType.StoredProcedure;
con.Open();
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
VideoFiles video = new VideoFiles();
video.ID = Convert.ToInt32(rdr["ID"]);
video.Name = rdr["Name"].ToString();
video.FileSize = Convert.ToInt32(rdr["FileSize"]);
video.FilePath = rdr["FilePath"].ToString();
videolist.Add(video);
}
}
return View(videolist);
}
Create a UploadVideo action method with [HttpPost] in the controller. Write the following code to insert data into the database and upload the file in the VideoFileUpload folder of the project.
[HttpPost]
public ActionResult UploadVideo(HttpPostedFileBase fileupload)
{
if (fileupload != null)
{
string fileName = Path.GetFileName(fileupload.FileName);
int fileSize = fileupload.ContentLength;
int Size = fileSize / 1000;
fileupload.SaveAs(Server.MapPath("~/VideoFileUpload/" + fileName));
string CS = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
using (SqlConnection con = new SqlConnection(CS))
{
SqlCommand cmd = new SqlCommand("spAddNewVideoFile", con);
cmd.CommandType = CommandType.StoredProcedure;
con.Open();
cmd.Parameters.AddWithValue("@Name", fileName);
cmd.Parameters.AddWithValue("@FileSize", Size);
cmd.Parameters.AddWithValue("FilePath", "~/VideoFileUpload/" + fileName);
cmd.ExecuteNonQuery();
}
}
return RedirectToAction("UploadVideo");
}
Complete HomeController code.
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Web;
using System.Web.Mvc;
using MvcUploadVideoFile_Demo.Models;
namespace MvcUploadVideoFile_Demo.Controllers
{
public class HomeController : Controller
{
// GET: Home
public ActionResult Index()
{
return View();
}
[HttpGet]
public ActionResult UploadVideo()
{
List<VideoFiles> videolist = new List<VideoFiles>();
string CS = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
using (SqlConnection con = new SqlConnection(CS))
{
SqlCommand cmd = new SqlCommand("spGetAllVideoFile", con);
cmd.CommandType = CommandType.StoredProcedure;
con.Open();
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
VideoFiles video = new VideoFiles();
video.ID = Convert.ToInt32(rdr["ID"]);
video.Name = rdr["Name"].ToString();
video.FileSize = Convert.ToInt32(rdr["FileSize"]);
video.FilePath = rdr["FilePath"].ToString();
videolist.Add(video);
}
}
return View(videolist);
}
[HttpPost]
public ActionResult UploadVideo(HttpPostedFileBase fileupload)
{
if (fileupload != null)
{
string fileName = Path.GetFileName(fileupload.FileName);
int fileSize = fileupload.ContentLength;
int Size = fileSize / 1000;
fileupload.SaveAs(Server.MapPath("~/VideoFileUpload/" + fileName));
string CS = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
using (SqlConnection con = new SqlConnection(CS))
{
SqlCommand cmd = new SqlCommand("spAddNewVideoFile", con);
cmd.CommandType = CommandType.StoredProcedure;
con.Open();
cmd.Parameters.AddWithValue("@Name", fileName);
cmd.Parameters.AddWithValue("@FileSize", Size);
cmd.Parameters.AddWithValue("FilePath", "~/VideoFileUpload/" + fileName);
cmd.ExecuteNonQuery();
}
}
return RedirectToAction("UploadVideo");
}
}
}
Step 7. Right-click on the UploadVideo action method and Add view (uncheck use a layout page). Click on Add.
![]()
Add the following jQuery script and bootstrap file in the head section of the view page. Download or add a package from NuGet Package Manager Click on Tools => NuGet Package Manager => Manage NuGet Package. Select Browse type bootstrap in the search bar, and select and install a similar jQuery. All downloaded files will be in content and scripts.
Add the following styles and scripts in the head section.
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<link href="~/Content/bootstrap.min.css" rel="stylesheet" />
<script src="~/scripts/jquery-3.3.1.min.js"></script>
<script src="~/scripts/bootstrap.min.js"></script>
Write the following style for the video frame and title of video.
<style type="text/css">
.video-frame {
width: 100%;
height: 195px;
border: 4px solid #dc3545;
box-shadow: 1px 2px 3px #dc3545;
border-radius: 3px;
}
.title {
font-weight: 500;
font-size: 14px;
text-align: center;
margin-bottom: 10px;
margin-top: 10px;
background-color: #dc3545;
color: white;
box-shadow: 1px 2px 4px #dc3545;
}
</style>
Complete view code
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Upload Video</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<link href="~/Content/bootstrap.min.css" rel="stylesheet" />
<script src="~/scripts/jquery-3.3.1.min.js"></script>
<script src="~/scripts/bootstrap.min.js"></script>
<style type="text/css">
.video-frame {
width: 100%;
height: 195px;
border: 4px solid #dc3545;
box-shadow: 1px 2px 3px #dc3545;
border-radius: 3px;
}
.title {
font-weight: 500;
font-size: 14px;
text-align: center;
margin-bottom: 10px;
margin-top: 10px;
background-color: #dc3545;
color: white;
box-shadow: 1px 2px 4px #dc3545;
}
</style>
</head>
<body>
<div class="container py-4">
<h3 class="text-center text-uppercase">How to Dynamically Upload and Play Video File Using ASP.NET MVC5</h3>
<div class="card">
<div class="card-header bg-danger text-white">
<h6 class="text-uppercase">video List</h6>
</div>
<div class="card-body">
<div class="row">
<button style="margin-left: 27px; margin-bottom:10px;" type="button" class="btn btn-danger rounded-0" data-toggle="modal" data-target="#UploadVideo">
<i class="fa fa-plus-circle"></i> Add New
</button>
<div class="modal fade" id="UploadVideo">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Upload New video File</h4>
<button type="button" class="close" data-dismiss="modal">×</button>
</div>
<div class="modal-body">
@using (Html.BeginForm("UploadVideo", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div class="form-group">
<label>Choose File:</label>
<div class="input-group">
<div class="custom-file">
<input type="file" id="fileupload" name="fileupload" class="custom-file-input" />
<label class="custom-file-label"></label>
</div>
<div class="input-group-append">
<input type="submit" id="btnUpload" class="btn btn-secondary" value="Upload" />
</div>
</div>
</div>
}
</div>
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
</div>
<div class="row">
@foreach (var item in Model)
{
<div class="col-sm-4 col-md-4 col-xs-12">
<div class="title">@item.Name</div>
<div class="video-frame">
<video style="width:100%; height:auto;" controls>
<source src="@Url.Content(@item.FilePath)" type="video/mp4" />
</video>
</div>
</div>
}
</div>
</div>
</div>
</div>
</body>
</html>
Step 8. Run Project ctr+F5
Screenshot 1
![Upload new vedio file]()
Screenshot 2
![Desktop]()
Screenshot 3
![]()
Conclusion
In this article, I have explained how to upload and play a video file of up to 100MB in size using ASP.NET MVC5. I have used bootstrap 4. I have explained a step by step procedure with some screenshots.