You are on page 1of 7

DEMO FILE SERVER

Create Model Class


EmpModel.cs class and FileDetailsModel
public class EmpModel
{

[Required]
[DataType(DataType.Upload)]
[Display(Name = "Select File")]
public HttpPostedFileBase files { get; set; }
}

public class FileDetailsModel


{

public int Id { get; set; }


[Display(Name = "Uploaded File")]
public String FileName { get; set; }
public byte[] FileContent { get; set; }
}

Step 3 -Crear La BD la table y los SP


CREATE TABLE [dbo].[FileDetails](
[Id] [int] IDENTITY(1,1) NOT NULL,
[FileName] [varchar](60) NULL,
[FileContent] [varbinary](max) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

Create Procedure [dbo].[AddFileDetails]


(
@FileName varchar(60),
@FileContent varBinary(Max)
)
as
begin
Set NoCount on
Insert into FileDetails values(@FileName,@FileContent)

End

CREATE Procedure [dbo].[GetFileDetails]


(
@Id int=null

)
as
begin

select Id,FileName,FileContent from FileDetails


where Id=isnull(@Id,Id)
End

Referenciar el Dapper
Step 4 - Add Controller Class

Crear el Controller FilesController


Conexion con la Base de datos

#region Database connection

private SqlConnection con;


private string constr;
private void DbConnection()
{
constr = ConfigurationManager.ConnectionStrings["dbcon"].ToString();
con = new SqlConnection(constr);

}
#endregion

Operaciones con la BD
#region Database related operations
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();

}
#endregion

Subir Archivos

#region Upload Download file

public ActionResult FileUpload()


{
return View();
}

[HttpPost]
public ActionResult FileUpload(HttpPostedFileBase files)
{

String FileExt = Path.GetExtension(files.FileName).ToUpper();

if (FileExt == ".PDF")
{
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
{

ViewBag.FileStatus = "Invalid file format.";


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);

}
#endregion

Ver Archivos

#region View Uploaded files


[HttpGet]
public PartialViewResult FileDetails()
{
List<FileDetailsModel> DetList = GetFileList();

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;
}

#endregion

Step 5 - Create strongly typed View en la Carpeta Files


FileUpload.cshtml

@model Demo3.Models.EmpModel

@{
ViewBag.Title = "FileUpload";
}

<h2>FileUpload</h2>

@using (Html.BeginForm("FileUpload", "Files", 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-8">
@Html.Action("FileDetails", "Files")

</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>

FileDetails.cshtml

@model IEnumerable<Demo3.Models.FileDetailsModel>

<table class="table table-bordered">


<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.FileName)
</td>

<td>
@Html.ActionLink("Download", "DownLoadFile", new { id = item.Id })

</td>
</tr>
}

</table>

You might also like