叶落风行

html,javascript,css,asp.net,nodejs,sqlserver

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

jdownload.aspx代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="jdownload.aspx.cs" Inherits="Scripts.jdownload.jDownload" %>

  

jdownload.aspx.cs

using System;

namespace Scripts.jdownload
{
    public partial class jDownload : System.Web.UI.Page
    {
        string[,] mime_types ={{"pdf", "application/pdf"},{"txt","text/plain"},{"html","text/html"},
            {"htm","text/html"},{"zip","application/zip"},{"doc","application/msword"},{"docx","application/msword"},
            {"xls","application/vnd.ms-excel"},{"xlsx","application/vnd.ms-excel"},{"ppt","application/vnd.ms-powerpoint"},
            {"gif","image/gif"},{"png","image/png"},{"jpeg","image/jpg"},{"jpg","image/jpg"},{"rar","application/octet-stream"}};
        string ext = null;
        string path = null;
        string action = null;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                action = Request["action"];//download or info
                path = Request["path"];//file to be downloaded
                if (action != null && path != null && action.Length > 0 && path.Length > 0)
                {
                    string absPath = Server.MapPath("~/" + path);// +"\\" + path.Replace("/", @"\");
                    System.IO.FileInfo fi = new System.IO.FileInfo(absPath);
                    if (fi.Exists)
                    {
                        ext = fi.Extension.Replace(".", "");
                        bool bKnownExt = false;
                        string contentType = "application/force-download";
                        for (int i = 0; i < mime_types.Length; i++)
                        {
                            if (ext.ToLower().Equals(mime_types[i, 0]))
                            {
                                bKnownExt = true;
                                contentType = mime_types[i, 1];
                                break;
                            }
                        }
                        if (!bKnownExt)
                        {
                            Response.Write("{\"error\":\"unknown file type.\"}");
                            Response.End();
                        }
                        if (action.Equals("download"))
                        { GetFile(absPath, contentType, fi.Length); }
                        else
                        { GetInfo(fi.Name, ext, fi.Length); }
                    }
                    else
                    {
                        Response.Write("{\"error\":\"File Not Exists.\"}");
                        Response.End();
                    }
                }
                else
                {
                    Response.Write("{\"error\":\"Empty Param.\"}");
                    Response.End();
                }
            }
            else
            {
                Response.Write("{\"error\":\"No repeat.\"}");
                Response.End();
            }
        }
        private void GetFile(string filePath, string contentType, long fileSize)
        {
            Response.ClearContent();
            Response.AddHeader("Pragma", "public");
            Response.AddHeader("Expires", "0");
            Response.AddHeader("Cache-Control", "must-revalidate, pre-check=0");
            Response.AddHeader("Content-Disposition", "attachment; filename=" + path);
            Response.AddHeader("Content-Type", contentType);
            Response.AddHeader("Content-Transfer-Encoding", "binary");
            Response.AddHeader("Content-Length", fileSize.ToString());
            Response.TransmitFile(filePath);
        }
        private void GetInfo(string fileName, string extension, long fileSize)
        {
            Response.Write("{\"filename\":\"" + Microsoft.JScript.GlobalObject.escape(fileName) + "\",\"filetype\":\"" + Microsoft.JScript.GlobalObject.escape(extension) + "\",\"filesize\":" + (fileSize / 1024).ToString() + "}");
        }
    }
}

  jquery.jdownload.css

.jDownloadDialog {
	font-size: 14px;
	padding-top: 20px;
}

.jDownloadDialog .jDownloadInfo {
	margin-top: 20px;
	font-size: 12px;
}

.jDownloadDialog p {
	margin: 10px 0;
	width: 100%;
}

.jDownloadDialog .jDownloadInfo p span {
	font-weight: bold;
	width: 20%;
	display: inline-block;
}

.jDownloadDialog .jDownloadError {
	color: #dd0000;
}

  jquery.jdownload.js

/*
* jDownload - A jQuery plugin to assist file downloads
* Examples and documentation at: http://jdownloadplugin.com
* Version: 1.3 (18/11/2010)
* Copyright (c) 2010 Adam Chambers, Tim Myers
* Licensed under the GNU General Public License v3: http://www.gnu.org/licenses/gpl.html
* Requires: jQuery v1.4+ & jQueryUI 1.8+
*/
//update wxf
function GetUrl(path) {


    var dialog = $("#jDowndialog"); // set dialog options
    dialog.dialog({
        autoOpen: false,
        buttons: {
            "Cancel": function () {
                $(this).dialog('close');
            },

            "Download": function () {
                start_download(path);
                $(this).dialog('close');
            }
        },
        width: 400,
        height: 300,
        modal: true,
        close: null
    });
    dialog.html("");

    // if filePath is not specified then use the href attribute
    var filePath = path;

    dialog.html('<p>Fetching File Info...</p><img src="../Scripts/jdownload/loader.gif" alt="Loading" />');

    $.ajax({
        type: 'POST',
        url: '../Scripts/jdownload/jdownload.aspx',
        data: 'action=download&path=' + filePath,
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            dialog.html("<p class=\"jDownloadError\">Fatal Error.</p>");
        },
        success: function (data) {
            //setTimeout(function() {
            var jsonData={};
            try {
                jsonData = JSON.parse(data);
            } catch(e) {

            } 
            if (jsonData.error) {

                dialog.html("<p class=\"jDownloadError\">" + jsonData.error + "</p>");

            } else {


                var url = '../Scripts/jdownload/jdownload.aspx?action=info&path=' + filePath;


                // get file information
                $.getJSON(url, function (filedata) {

                    // Check to see if file is not allowed
                    if (filedata.error == 'denied') {

                        // append new file info
                        dialog.html('<p class=\"jDownloadError\">This file type is not allowed.</p>');

                    } else {

                        // parse JSON
                        var html = "<div class=\"jDownloadInfo\">";
                        html += "<p><span>File Name:</span> " + decodeURI(filedata.filename) + "</p>";
                        html += "<p><span>File Type:</span> " + filedata.filetype + "</p>";
                        html += "<p><span>File Size:</span> " + ((filedata.filesize == "0") ? "<1" : filedata.filesize) + " KB</p>";
                        html += "</div>";

                        // remove any old file info & error messages
                        $('.jDownloadInfo, .jDownloadError').remove();

                        var desc = 'Download the file now?';

                        // append new file info
                        dialog.html('<p>' + desc + '</p>' + html);

                    }


                });

            }
            //}, 200);
        }
    });

    // open dialog 
    dialog.data('jDownloadData', { filePath: filePath }).dialog('open');

    return false;

};

function start_download(path) {
    $("#iframeDown").attr('src', '../Scripts/jdownload/jdownload.aspx?action=download&path=' + path);
    return false;
}

$(function () {
    var iframe = '<iframe id="iframeDown" class="jDownloadFrame" width="0" height="0" src="" style="visibility: hidden;"></iframe>';
    $(iframe).appendTo("body");


    var dialogHTML = '<div class="jDownloadDialog" title="DownLoad" id="jDowndialog"></div>';
    var dialog = $(dialogHTML).appendTo("body");
});

  

 

posted on 2013-03-05 15:31  叶落风行  阅读(361)  评论(0编辑  收藏  举报