// Copyright (c) 2010
// by OpenLight Group
// http://openlightgroup.net/
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated 
// documentation files (the "Software"), to deal in the Software without restriction, including without limitation 
// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and 
// to permit persons to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or substantial portions 
// of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED 
// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 
//
// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
// DEALINGS IN THE SOFTWARE.

using System;
using System.Linq;
using System.IO;
using MVMFileManagerSite;

public partial class DownloadFile : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        // Get parameters
        string FileName = Request.QueryString["FileName"];
        string FilePath = Request.QueryString["FilePath"];

        // All parameters must have a value or return nothing
        if (
            FileName != "" &&
            FilePath != ""
            )
        {
            try
            {
                string path = MapPath(@"~\Files\");
                // Remove any .. to prevent backing up directories
                FilePath = FilePath.Replace("..", "");
                FileName = FileName.Replace("..", "");
                string strPath = Path.Combine(path + FilePath, FileName);

                // Return the file
                Response.ClearHeaders();
                Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", FileName));

                Response.ClearContent();
                Response.ContentEncoding = System.Text.Encoding.UTF8;
                Response.ContentType = GetContentType(strPath);

                FileStream sourceFile = new FileStream(strPath, FileMode.Open);
                long FileSize;
                FileSize = sourceFile.Length;
                byte[] getContent = new byte[(int)FileSize];
                sourceFile.Read(getContent, 0, (int)sourceFile.Length);
                sourceFile.Close();

                Response.BinaryWrite(getContent);
                Response.Flush();
                Response.Close();

            }
            catch (Exception ex)
            {
                lblDisplayFilesError.Text = ex.Message;
            }
        }

    }
    #region GetContentType
    public string GetContentType(string strextension)
    {
        string contentType;
        switch (strextension.ToLower())
        {
            case ".gif":
                contentType = "image/gif";
                break;
            case ".jpg":
            case ".jpeg":
                contentType = "image/jpeg";
                break;
            case ".png":
                contentType = "image/png";
                break;
            case ".doc":
                contentType = "application/ms-word";
                break;
            case ".docx":
                contentType = "application/vnd.ms-word.document.12";
                break;
            case ".pdf":
                contentType = "application/pdf";
                break;
            case ".xls":
                contentType = "application/vnd.ms-excel";
                break;
            case ".ppt":
                contentType = "application/vnd.ms-powerpoint";
                break;
            case ".zip":
                contentType = "application/zip";
                break;
            case ".txt":
                contentType = "text/plain";
                break;
            default:
                contentType = "application/octet-stream";
                break;
        }
        return contentType;
    }
    #endregion
}
