Introduction
In this post I am explain how to upload file with encryption and download file with decryption using asp.net c#?Steps :
Step - 1 : Create New Project.
Go to File > New > Project > Select asp.net web forms application > Entry Application Name > Click OK.Step-2: Add New Folder.
Right Click on Solution Explorer > Add > New Folder > Rename Folder.Step-3: Add a Class.
Right Click on Solution Explorer > Add > Class > Enter Class Name > Add.Here is the class.
namespace ASPEncryptDecryptFile
{
public class UploadFile
{
public string FileName { get; set; }
public string FileExtention { get; set; }
public long Size { get; set; }
public string FilePath { get; set; }
public string ICon { get; set; }
}
}
Step-4: Add a Webpage and Design for upload file with encryption & show in datalist.
Go to Solution Explorer > Right Click on Project name form Solution Explorer > Add > New item > Select web form/ web form using master page under Web > Enter page name > Add.HTML Code
<h3>File Upload with encryption and Download with decryption using ASP.NET C#. </h3>
<div>
<table>
<tr>
<td>Select File : </td>
<td>
<asp:FileUpload ID="FileUpload1" runat="server" /></td>
<td>
<asp:Button ID="btnUpload" runat="server" Text="Upload & Encrypt" OnClick="btnUpload_Click" /></td>
</tr>
</table>
<div>
<%-- Add Datalist for Show Uploaded Files --%>
<asp:DataList ID="DataList1" runat="server" RepeatColumns="4" RepeatDirection="Horizontal" OnItemCommand="DataList1_ItemCommand">
<ItemTemplate>
<table>
<tr>
<td>
<img src='<%#Eval("ICon") %>' width="60px" />
</td>
</tr>
<tr>
<td>
<%#Eval("FileName") %>
</td>
</tr>
<tr>
<td>
<%#Eval("Size","{0} KB") %>
</td>
</tr>
<tr>
<td>
<asp:LinkButton ID="LinkButton1" runat="server" CommandName="Download" CommandArgument='<%#Eval("FilePath") %>'>Download</asp:LinkButton>
</td>
</tr>
</table>
</ItemTemplate>
</asp:DataList>
</div>
</div>
Step-5: Write code into page load event for show data.
Write below code into Page_Load event for show uploaded files. protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
PopulateUploadedFiles();
}
}
private void PopulateUploadedFiles()
{
DirectoryInfo di = new DirectoryInfo(Server.MapPath("~/UploadedFiles"));
List<UploadFile> uploadedFiles = new List<UploadFile>();
foreach (var file in di.GetFiles())
{
uploadedFiles.Add
(
new UploadFile
{
FileName = file.Name,
FileExtention = Path.GetExtension(file.Name),
FilePath = file.FullName,
Size = (file.Length/1024), // For get size in KB
ICon = GetIconPath(Path.GetExtension(file.FullName)) // Need to Get Icon...
}
);
}
DataList1.DataSource = uploadedFiles;
DataList1.DataBind();
}
private string GetIconPath(string fileExtention)
{
string Iconpath = "/Images";
string ext = fileExtention.ToLower();
switch (ext)
{
case ".txt":
Iconpath += "/txt.png";
break;
case ".doc":
case ".docx":
Iconpath += "/word.png";
break;
case ".xls":
case ".xlsx":
Iconpath += "/xls.png";
break;
case ".pdf":
Iconpath += "/pdf.png";
break;
case ".rar":
Iconpath += "/rar.png";
break;
case ".zip":
case ".7z":
Iconpath += "/zip.png";
break;
default:
break;
}
return Iconpath;
}
Step-6: Write code for Upload file with Encryption.
Write below code into button click event for Upload file with encryption. protected void btnUpload_Click(object sender, EventArgs e)
{
// Add code to upload file with encryption
byte[] file = new byte[FileUpload1.PostedFile.ContentLength];
FileUpload1.PostedFile.InputStream.Read(file, 0, FileUpload1.PostedFile.ContentLength);
string fileName = FileUpload1.PostedFile.FileName;
// key for encryption
byte[] Key = Encoding.UTF8.GetBytes("asdf!@#$1234ASDF");
try
{
string outputFile = Path.Combine(Server.MapPath("~/UploadedFiles"), fileName);
if (File.Exists(outputFile))
{
// Show Already exist Message
}
else
{
FileStream fs = new FileStream(outputFile, FileMode.Create);
RijndaelManaged rmCryp = new RijndaelManaged();
CryptoStream cs = new CryptoStream(fs, rmCryp.CreateEncryptor(Key, Key), CryptoStreamMode.Write);
foreach (var data in file)
{
cs.WriteByte((byte)data);
}
cs.Close();
fs.Close();
}
PopulateUploadedFiles();
}
catch
{
Response.Write("Encryption Failed! Please try again.");
}
}
Step-7: Write code for Download file with decryption.
Write below code into DataList1_ItemCommand event for Download decrypted file. protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
{
if (e.CommandName == "Download")
{
string filePath = e.CommandArgument.ToString();
// key for decryption
byte[] Key = Encoding.UTF8.GetBytes("asdf!@#$1234ASDF");
//UnicodeEncoding ue = new UnicodeEncoding();
FileStream fs = new FileStream(filePath, FileMode.Open);
RijndaelManaged rmCryp = new RijndaelManaged();
CryptoStream cs = new CryptoStream(fs, rmCryp.CreateDecryptor(Key, Key), CryptoStreamMode.Read);
try
{
// Decrypt & Download Here
Response.ContentType = "application/octet-stream";
//Response.AddHeader("Content-Disposition","attachment; filename=" + Path.GetFileName(filePath) + Path.GetExtension(filePath));
Response.AddHeader("Content-Disposition", "attachment; filename=myfile" + Path.GetExtension(filePath));
int data;
while ((data = cs.ReadByte()) != -1)
{
Response.OutputStream.WriteByte((byte)data);
Response.Flush();
}
cs.Close();
fs.Close();
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
finally
{
cs.Close();
fs.Close();
}
}
}
