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