MVC4中基于bootstrap和HTML5的图片上传Jquery自定义控件

场景:mvc4中上传图片,批量上传,上传前浏览,操作.图片进度条.

解决:自定义jquery控件

没有解决:非图片上传时,会有浏览样式的问题;

解决方案;

1.样式 – bootstrap 的css和图标与metro-ui-css的部分css

2.js 自定义控件

3.后台 mvc4

-------------------------------------------------

效果:

 

1.

[class*=border-color] {
    border: 2px solid;
}

.border-color-blue {
    border-color: #2d89ef !important;
}
.bg-color-blue {
    background-color: #2d89ef !important;
}
.fg-color-red {
    color: #b91d47 !important;
}

.fg-color-blue {
    color: #2d89ef !important;
}
.fg-color-white {
    color: #ffffff !important;
}

.bg-color-lighten {
    background-color: #d5e7ec !important;
}

.percentage-bar {
    height: 5px;
    width: 100%;
    margin-bottom: 10px;
    *zoom: 1;
}

    .percentage-bar .bar {
        float: left;
        width: 0;
        background-color: #008287;
        height: 5px;
    }

    .percentage-bar:before,
    .percentage-bar:after {
        display: table;
        content: "";
    }

    .percentage-bar:after {
        clear: both;
    }
/*
 * Metro UI CSS
 * Copyright 2012 Sergey Pimenov
 * Licensed under the MIT License
 *
 * Tiles.less
 *
 */
.tile-group {
    margin: 0;
    margin-right: 80px;
    float: left;
    width: auto;
    height: auto;
    min-height: 1px;
    width: 802px;
}

.tile {
    display: block;
    float: left;
    background-color: #525252;
    width: 150px;
    height: 150px;
    cursor: pointer;
    box-shadow: inset 0px 0px 1px #FFFFCC;
    text-decoration: none;
    color: #ffffff;
    overflow: hidden;
    position: relative;
    font-weight: 300;
    font-size: 11pt;
    letter-spacing: 0.02em;
    line-height: 20px;
    font-smooth: always;
    margin: 0 10px 10px 0;
    overflow: hidden;
}

    .tile * {
        color: #ffffff;
    }

    .tile .tile-content {
        width: 100%;
        height: 100%;
        padding: 0;
        padding-bottom: 30px;
        vertical-align: top;
        padding: 10px 15px;
        overflow: hidden;
        text-overflow: ellipsis;
        position: relative;
        font-weight: 400;
        font-size: 9pt;
        font-smooth: always;
        color: #000000;
        color: #ffffff;
        line-height: 16px;
    }

        .tile .tile-content:hover {
            color: rgba(0, 0, 0, 0.8);
        }

        .tile .tile-content:active {
            color: rgba(0, 0, 0, 0.4);
        }

        .tile .tile-content:hover {
            color: #ffffff;
        }

        .tile .tile-content h1,
        .tile .tile-content h2,
        .tile .tile-content h3,
        .tile .tile-content h4,
        .tile .tile-content h5,
        .tile .tile-content h6,
        .tile .tile-content p {
            padding: 0;
            margin: 0;
            line-height: 24px;
        }

            .tile .tile-content h1:hover,
            .tile .tile-content h2:hover,
            .tile .tile-content h3:hover,
            .tile .tile-content h4:hover,
            .tile .tile-content h5:hover,
            .tile .tile-content h6:hover,
            .tile .tile-content p:hover {
                color: #ffffff;
            }

        .tile .tile-content p {
            font-weight: 400;
            font-size: 9pt;
            font-smooth: always;
            color: #000000;
            color: #ffffff;
            line-height: 16px;
            overflow: hidden;
            text-overflow: ellipsis;
        }

            .tile .tile-content p:hover {
                color: rgba(0, 0, 0, 0.8);
            }

            .tile .tile-content p:active {
                color: rgba(0, 0, 0, 0.4);
            }

            .tile .tile-content p:hover {
                color: #ffffff;
            }

    .tile.icon > .tile-content {
        padding: 0;
    }

        .tile.icon > .tile-content > img {
            position: absolute;
            width: 64px;
            height: 64px;
            top: 50%;
            left: 50%;
            margin-left: -32px;
            margin-top: -32px;
        }

        .tile.icon > .tile-content > i {
            font-size: 128px;
            margin: 9px;
        }

    .tile.image > .tile-content,
    .tile.image-slider > .tile-content {
        padding: 0;
    }

        .tile.image > .tile-content > img,
        .tile.image-slider > .tile-content > img {
            width: 100%;
            height: auto;
            min-height: 100%;
            max-width: 100%;
        }

    .tile.image-set > .tile-content {
        margin: 0;
        padding: 0;
        width: 25% !important;
        height: 50%;
        float: left;
        border: 1px #1e1e1e solid;
    }

        .tile.image-set > .tile-content > img {
            min-width: 100%;
            width: 100%;
            height: auto;
            min-height: 100%;
        }

    .tile.image-set .tile-content:first-child {
        width: 50% !important;
        float: left;
        height: 100%;
    }

    .tile.double {
        width: 310px;
    }

    .tile.triple {
        width: 470px;
    }

    .tile.quadro {
        width: 630px;
    }

    .tile.double-vertical {
        height: 310px;
    }

    .tile.triple-vertical {
        height: 470px;
    }

    .tile.quadro-vertical {
        height: 630px;
    }

    .tile .brand,
    .tile .tile-status {
        position: absolute;
        bottom: 0;
        left: 0;
        right: 0;
        min-height: 30px;
        background-color: transparent;
        *zoom: 1;
    }

        .tile .brand:before,
        .tile .tile-status:before,
        .tile .brand:after,
        .tile .tile-status:after {
            display: table;
            content: "";
        }

        .tile .brand:after,
        .tile .tile-status:after {
            clear: both;
        }

        .tile .brand > .token,
        .tile .tile-status > .token {
            position: absolute;
            bottom: 0;
            right: 0;
            right: 5px;
            margin-bottom: 0;
            color: #ffffff;
            width: 34px;
            height: 28px;
            text-align: center;
            font-weight: 600;
            font-size: 11pt;
            letter-spacing: 0.01em;
            line-height: 14pt;
            font-smooth: always;
            padding-top: 3px;
        }

            .tile .brand > .token.activity,
            .tile .tile-status > .token.activity {
                background: #2d89ef url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGMSURBVDhPvZMtTwNBEIbv2mtScaICcQJRgSgJCQIEhqSiAlEHAlFRwU/ov0AgUEgUsrIkiJIgMOAQJFSQQAIJJBWIu95Hj2eGvXIpB3W8yWTn452Z3dld25pDmqZuFEWdcrm8jr6JK7Bt+wb9Ft85+vsXswBxHHdIfmFNi4TYG7InXAp6ss52kCTJIc6e6KzSVbrdYzrYDaSFXZU4uEQ8x3FW1ZpMJge5Tn3IdQ3kID5iw4zHTqIsUEP3TWCA7WhgDjRZg/eUFRCR3Fl3KYJjyfALIUU46jHcsSlQl8FdmQJnhrcQJFbJ6QZB0LDDMNyS4XBFo1Kp9Gw4/wi247GLHmvNuBaC47Y5gtzIQB1mBmMGdDSdTpfV+QdM8vfcsqkap6ClgQIQa+a4bXViPGRO5ILjuBqYAwk7yIfhXcNz9CljDFkkST6P4JGjnHA7d+gBxAY3tIve1Khljbi1beKvakHQp0uhfTrMjvOL9H3fX9FE8OM7yxAhdem4QWHZkSufSoTYaaVSkY9kYFmfXgyTciI3uacAAAAASUVORK5CYII%3D) 50% no-repeat;
            }

            .tile .brand > .token.alert,
            .tile .tile-status > .token.alert {
                background: #2d89ef url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFeSURBVDhPpZMtT8RAEIbb7YoTJ04gkQgQuBNIEpB4LD8AwQ9AkCCQhGAvQSAuKHCIE0gEP+DEISAhQYK4pE0/eWa65a7lSvh4k8nsvDv77sxs67UhSZLNNE0LZ3uO/gLj/J+hAkVRWI1+geqMCuR5fkKZoyiKViX+DuQu094wy7KhEmEYrkAk0qt4Nk5R77GszQCuE8fxIXxY8ZJjgiBY8n3/UcTwlsQDNifGmF29AcBtITyGOyan47gXXFfW2g/q+yi+VeptJhVgR1KRHp4HZI+bzknQlhYcvpQZuHRF8xmnCDyLL8MZEI9o4YkW3h1VB+o73DJp3to08l7xsw9Lng5i1EiSSV/Pcbdwzfk8MLcNqjIyye1STnHD5joln7lYcGWtXaP8gYsFfeJyHvR9waExt3wKsV74L3Brn/geu3OUDqiL1T7nNoEK8mLi9RUoZYqlsv4pqtf459/oeR8seozS7mDHCwAAAABJRU5ErkJggg%3D%3D) 50% no-repeat;
            }

            .tile .brand > .token.available,
            .tile .tile-status > .token.available {
                background: #2d89ef url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAIGNIUk0AAHolAACAgwAA+f8AAIDoAABSCAABFVgAADqXAAAXb9daH5AAAAKvSURBVHjahJA/bJR1HMY/31977x33r2LuClc1LYM9TSAUr5gqtkVJjAkSFxYHE3VgaWRw0cUwOagxMZLApoXFBIwuHVSoQYkVMBXUpqSkMW9jaS25plh7/3rv+3scTIwixs/8PHn+2Bk/SVtN2mqxacYOKw13KfNiXtlneihmDONXqs0VVs/VXP1UqJvnc8qBeZoWYWf9JHXVqWkj2EX55G76X86R4W40aDHNzMdzLBwJLLEWm6fTI+o0knvZ+dkgO/cDfGczTNpl5gjxePrpY0SPMKwKT1A5nCe7Y4ofDgQEv/Ghn2AqunZabUmR9Fb8gQoaUVIVFTSiokaV0qDu0T694Y+rGbWktnQ5+nHiuP+IjrFjR4cqevj9wBK8beO87t6jiyzbKJAiIEWSreQxjAm7QGyeAwzRzb39i/7WFbdV2bGs0nxvs7zjxtlOgRwZPP6v7R5PmhQPUOKEneFLd4UECfqs51WXU/opDL6wb/mdDfJkEfrXgUKk2UKbiM/5BoD76d7reujOANwgJH9H8p14PDnSzBGySZsSReecDIAIDxj/jxH/LcQtW7UJ0E8f69RwuP+0Ohwb1CnTS0CCW6zK3Wb9a4AnNcgWktRoYHdpYhgtWvypfRSARVv5yVXd2smGWuzTHo7qeRZZpk7zH00cRos2ITd5yT/HQY0gPKGW3u0YPvZ06HB77tO2hx5jN5HFTNk11lgHRIs2VW5Tp8kRf5g3eYUUSa5y/eKsfn7NTvlPaCjqelwDF3bx4ADAeXeJc1xijpCYmDJ9jKrCIe0H4IaF81/56VGDJTvtPwV1IFmhTO/4AOWDSQIAWmwiRIokADEx08xeXGD5hUjxQp0GnQCdOAKS1RnNP7tO7VDOMmO9bB8qUQRghVVCW7raUOPEvH45W7IidRoA/DEAmmk0pL+n6f4AAAAASUVORK5CYII%3D) 50% no-repeat;
            }

            .tile .brand > .token.unavailable,
            .tile .tile-status > .token.unavailable {
                background: #2d89ef url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAIGNIUk0AAHolAACAgwAA+f8AAIDoAABSCAABFVgAADqXAAAXb9daH5AAAAKASURBVHjalJK9axxXFMV/772ZzOysVqvRDgtaSSwpJYFwY3ATEpIm5KNLawgp3Ljz/5E2bu20CYQUBoMNNnaRMkUKqYiQtIgdCQ0TaVc7M29n3nspzC7GMYYcuMWFe7jnHI4YjUY453DOYYyh0+l8opT63vO8L8MwbAshqKqq0lo/c849rqrquXMOIcSbGY1GWGsxxny0urr6MI7jH5RSAFhrAZBSLvc8z3+dTqf3lFL/SCnxAIwxwdra2tP19fXPAC4vL8myjKIoAIiiiF6vR7/fJ0mS75RSH19dXX0hpbwWx8fHrKys/JwkyV1rLYeHh5yenuKc420lzjm2trbY3d3F8zzyPH8ynU6/ERcXF3fiOP7D930ODg44OjoiDMOl7AWstZRlyXA4ZH9/H2MM4/H4K+l53n3f98myjJOTE4Ig+A95kUMURZydnXF+fo5SiiiKHkjf9z9f+AaWst+HRfKL2yiKbssgCNrOOWaz2Xs/vwulFLPZjLquCcPwDcM5x//B2/dyPp9XC3/WWoQQHyQbY2i32/i+T1VVTtZ1/QogSZJlGz/02VpLkiQAlGX5l2ya5mHTNPT7fba3tynLctnAd8llWTIYDNjY2MBaS1EUP0qt9YvJZPI7wM7ODsPhEK01WmuapqFpGrTWVFXFYDBgb28PIQTX19ev67r+TYzHY7TW3W63+zKO41sAaZqSZRk3NzcAtNtter0em5ubAEwmk7/zPP9USjkWaZoyn89xziWdTudRt9v9etGFuq4B8H1/aSXP89dFUdx1zp065xBpmlLXNUIIjDG0Wq1vPc+7H4bhnVarhRCCsiwpiuJPY8xPRVH8EgQBxhistfw7ABpxTL93U9x/AAAAAElFTkSuQmCC) 50% no-repeat;
            }

            .tile .brand > .token.away,
            .tile .tile-status > .token.away {
                background: #2d89ef url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAIGNIUk0AAHolAACAgwAA+f8AAIDoAABSCAABFVgAADqXAAAXb9daH5AAAAJ2SURBVHjajJI7iFVnFIW//d9zz52ZO2fG14gzJBgbp5JYKPh+NqKxsxWMRZoBCxu1sAuBKFaClj5KDUQhRXybCIqICjqNYjFDhtExN45e7/uc8y+L/yJGp3A1+2fDWv/ea23zlQvIp0gpRgfrWbZRNrhP0cAOopEyGGSvWmQz15zq59SeuC5LsAis0MJ85SLKG8jXY3pXnKb8/X6iBAB8KLhuzZtQf/gbrWc/WTGetSgnAg9qlCiv/pNk1RYAqz3A6jeg/SyoxMtReRNKNsLAhj24gWW0726H+B3+9Rmyd3fPp5KyXMpf/SqNL5KelEIdH5Ke9Ejj8+SnjyrLWkolZbX7f/jZk5h/e3WN7197j0I/NnMMN3MYoiXgBv6/g+rQmUJDR/Ajv4BP0eylnU5u/pgK/Vj9Ee6/411y8gm5a4b1Qfwt9uYUrnoTXBGLvzvoFCXbDLDaVcjfd38WX0JBRCnUroRW/M1qRzRSxgPt55+NPRc8FJJgbtaB4rBz+phRxtcj//hylr5s4YDScvDVT0KfCw7yGpRGIYohfS2H3v4NoL6tYL3BbWwOsoHawY3y1tDJpp46p8pp5U2UrEcLD0BnCtT4bBIXyJ0J/Pwf0eAu8ELtiROO5uQtazy9LMAvPoKGDoU00n/CSr4K2RTkFfyCMRj+OWg2Ht9RNv27+X/PId8cVN+62/SvWAngqtehdq17yjmURlHfZjRvdxi98fyFr/21GWfT5ivnkQehRfSOnqV35S4KpW4w7ZB/1NNNMYf6wzukk3ulbBI1iIJkBBZX1Bn/gby621wyRrx0DcXhQGzPYOnEY/nmKbVeXLTicNcn+DAArZ4503S5ZjkAAAAASUVORK5CYII%3D) 50% no-repeat;
            }

            .tile .brand > .token.busy,
            .tile .tile-status > .token.busy {
                background: #2d89ef url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAIGNIUk0AAHolAACAgwAA+f8AAIDoAABSCAABFVgAADqXAAAXb9daH5AAAAKNSURBVHjajJI9a1RBGIWfGeLdmPXuKkR0Q0RTmFsFUxgQNcaPRonpbAW1sAlY2IhFfoCIVSDaaVImFhYWmkTxAwJBVgttNqTYQFAjAWPi7t3svXeOxeC3hQdeZpiZ887DmTFuchIlCUoSTLOJ6erqV7F4QYXCaTo68hgDHz82WFmZsbXauKrVWYUhBjCNBsZNTaF6HdVqAT09tzlw4BJhyD8Vx1Au36dSuWyC4LPJMlpwDur1HH19jzh48DiAefUK8+QJVCrgHHR3o2PHUH8/HD16jkKhi7m5UwTBF9zdu6RzcxOJpFRSduOG1N4u5XJ+3LlTam2Vtm+XGxlR2mgokZTOzz90o6PgpqcPpRsbP83GSKWSFEXS/v2+okjq7JRA7vp1pZLSZlPJ5OQZqx07hrVtG+b1a+zNm7B7N4ShR/8u56CtDfbswYyNYZ8+hS1bMPv2XbUKw5MGMNPTsLEBhQJIfwco+SZJAo8f+7XOzj5LR0cegIUFb/715j/lnKerVKDZhFLJWlnrN9OU/1aW/Zha8+FDA4Dublhfh+8N/yVr4etXiCIIAvj0SZa1tRcAOnECtm6FWg2M+dtsDGxu8uMsYJaX31q7unpbcYyOHEFXrsDyMtTrv5NY683VKu7iRTQ4CBKqVm/h7twhnZ9/kEhK41ju2jWpWJTa2qRdu3zl81I+r2x4WNnamv8H5fKLZHQU48bHURwXdfjwM3p6egHs7CzMzPi0swyiCA0MoKEhj76wsOiePx/AmPfGTUwgQFI7UXSP3t5BcjmPvrnp37+19Wf65fJLlpbOK02XqNdpAaClBYJgVe/enWV9fciE4TB79x6iVPLGlRVMtfpGcTymxcUpUyr5nIBvAwDWIWcndiwtQAAAAABJRU5ErkJggg%3D%3D) 50% no-repeat;
            }

            .tile .brand > .token.newMessage,
            .tile .tile-status > .token.newMessage {
                background: #2d89ef url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAC/SURBVDhP1ZE9DgIhFIQhobDYg1haWniMbSw9j0exsfMAeg9L7Sy2kPATnCFI2LgYtjJOMjx4vPkoED+X5OK934cQ+thpFOYvSqmdMMascVDOuQMcGn1GptNaL4W1dgBkMwOSw8jeBJszIKMwexFAN0A+wnQG0Lh4wv0EJIb5AO4fRX8MoDFAlZAyPJSztOSSfiYLAYeyxTcdURcIrqSUJ7iLA4UmAdQbgnqvhakqgEoQXQtTXwEtIuCa9n8pIV67VJf6AmhGmgAAAABJRU5ErkJggg%3D%3D) 50% no-repeat;
            }

            .tile .brand > .token.paused,
            .tile .tile-status > .token.paused {
                background: #2d89ef url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAArSURBVDhPY/j9+7fDnz9//mPBCQxQgE8NE1QN2WDUgFEDQGDUgIE3gIEBAArtNKc4HT7sAAAAAElFTkSuQmCC) 50% no-repeat;
            }

            .tile .brand > .token.playing,
            .tile .tile-status > .token.playing {
                background: #2d89ef url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEXSURBVDhPY4CBnz9/pvz+/dsFyiUaMEFpBiYmJhkgtf3v37/t////Z4GIEgZwA0CAkZGRBai5AmjIYSCtABXGC1AMQAIWf/78OQ/EEVA+ToDLAJBrBIDUcqBrZgNdwwMRxQQ4DYABoOYUoCGngYFsABVCAQQNgAINYCAf//XrVwGUDwfEGgDyEgfQkH5guGwGukoEKky8AUhA5sePH6DwAQOSDAC6YgIzM7MpJyfnHagQcQYAnfwGiD2BmguBhvyBCoMBMQbsYWFh0WVlZd0B5aMAnAYAbfzz79+/SqBmV6CtL6DCGACXAQ+ABliysbF1QPk4AYYBQI0rgH7VBWo+AxXCC+AGADV+AVKJQL9GAp0MYhMBGBgA8v5j1f90TA8AAAAASUVORK5CYII%3D) 50% no-repeat;
            }

            .tile .brand > .token.error,
            .tile .tile-status > .token.error {
                background: #2d89ef url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFiSURBVDhPjVM7TsNQELRjy8ISBQeIREtBEYnQUXCINFTkCCBxgNwAJI5AaejSpaCAEqRINBTcIQ1SbD9/mHmfZP3iSIw0ytt9O7O7thMGHpqmGVZVNQnD8AwcMde27RL8rOt6nqbpjy7sA4RTpdQKv20fcbcuy/IOZrGVbIHLpz7RHr52TJCYukuMeU+6WDBjdxej4UyLubMbm0KdBDyTzHWEyY01UEVRnA4Q8IEdaZVAFEW3yD/g+IzzFc6VuTFAHAPXO7vLKQi5q+suuOD+X15yx4ToEXON1QB3B6ZkC3Qd+q8Kaxzbo0TMCTLPefPAfPS8nTeOtnk1YEfMsf11pIm+y/P8BLusmaCZrevsLE1QO3F51FzopJyCQil2pAnFoLLxI7X6z8SxkVjgeMn4H/jGQz3Ht/BrY2MC85nrsI/sjNpDKzMTSODzHPELQ9EY1H9ndFqCHxC/JEnyrgs1guAPTvwreuY0IiIAAAAASUVORK5CYII%3D) 50% no-repeat;
            }

            .tile .brand > .token.attention,
            .tile .tile-status > .token.attention {
                background: #2d89ef url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEbSURBVDhPtZI9bsJAEIVZ7ANQ5gApEomChjoNBUUOkSJFivSUQE3JEThCCo4BkotcIVKKNEi2vP7hveVZrMFgKPJJo915szOzf51/Jc/zhbV2Jfc+kiR5QrLNsqzEMJJ8O0hcM1kWlWUZKtQOOo69ZGdpmn4ofB12QsI3k1BoRtP8F7Gell0GnT6rrpJ4HOfzUiU1ww7o9HepAGI2juNHyeegw7Ja3FRA9iW5jv9slSl0WqD2rEYjF7Hy68E7gCPNORpjpk44sg2CYAg969JTxVoywYIXmlyfAS77jRPDZ8PZN5j3KfiEYeh2yG07wQN5P4g/d9H9Hf5ZMkHM/QO5NbCzh6IoJgbVI/iNBdrALnY8An9X+w9rpLPbA/sADga+JgSiAAAAAElFTkSuQmCC) 50% no-repeat;
            }

        .tile .brand > .name,
        .tile .tile-status > .name {
            position: absolute;
            bottom: 0;
            left: 0;
            margin-bottom: 5px;
            margin-left: 15px;
            font-weight: 400;
            font-size: 9pt;
            font-smooth: always;
            color: #ffffff;
        }

            .tile .brand > .name:hover,
            .tile .tile-status > .name:hover {
                color: #ffffff;
            }

            .tile .brand > .name > [class*=icon-],
            .tile .tile-status > .name > [class*=icon-] {
                font-size: 24px;
            }

        .tile .brand > .icon,
        .tile .tile-status > .icon {
            margin: 5px 15px;
            width: 32px;
            height: 32px;
        }

            .tile .brand > .icon > [class*=icon-],
            .tile .tile-status > .icon > [class*=icon-] {
                font-size: 32px;
            }

            .tile .brand > .icon > img,
            .tile .tile-status > .icon > img {
                width: 100%;
                height: 100%;
            }

        .tile .brand > img ~ .text,
        .tile .tile-status > img ~ .text {
            position: absolute;
            left: 60px;
            width: auto;
        }

        .tile .brand > .text,
        .tile .tile-status > .text {
            position: relative;
            left: 8px;
            top: 5px;
            right: 50px;
            font-weight: 400;
            font-size: 9pt;
            font-smooth: always;
            color: #000000;
            color: #ffffff;
            line-height: 14px;
            width: 60%;
        }

            .tile .brand > .text:hover,
            .tile .tile-status > .text:hover {
                color: rgba(0, 0, 0, 0.8);
            }

            .tile .brand > .text:active,
            .tile .tile-status > .text:active {
                color: rgba(0, 0, 0, 0.4);
            }

            .tile .brand > .text:hover,
            .tile .tile-status > .text:hover {
                color: #ffffff;
            }

    .tile:hover {
        outline: 3px #3a3a3a solid;
    }

#imgdiv > span .token {
    height: 18px;
    float: right;
    width: 100%;
    right: 0px;
    font-size: small;
    text-align: right;
    filter: alpha(Opacity=80);
    -moz-opacity: 0.5;
    opacity: 0.5;
    background-color: #2d89ef;
}

#imgdiv > span .percentage-bar {
    background-color: #fff;
}

.fileshow {
    height: 800px;
    padding: 15px 15px 15px 15px;
}

.selected {
    border: 2px solid #2d89ef;
}

    .selected::after {
        border-left: 40px solid transparent;
        border-top: 40px solid #2d89ef;
        content: "\e176";
        display: block;
        height: 0;
        position: absolute;
        right: 0;
        top: 0;
        width: 0;
        z-index: 1001;
    }

    .selected::before {
        color: #fff;
        content: "\e013";
        font-family: 'Glyphicons Halflings';
        position: absolute;
        right: 4px;
        z-index: 1002;
    }

.overflowX {
    margin: 0px;
    text-align: left;
    overflow-y: auto;
    overflow-x: hidden;
}


#imgdiv .tile {
    width: 120px;
    height: 120px;
}

    #imgdiv .tile > img {
        width: 120px;
        height: 120px;
    }

.img-thumbnail:hover {
    border: 1px solid #00a300;
    outline: 0 none;
}
.clearleft {
    padding-left: 0px;
}
.padding15 {
    padding: 15px;
}

2.js插件

/* 作者: 吾山散人 remoteplaces@hotmail.com
 *  说明: 基于HTML5+bootstrap的文件上传 http://www.cnblogs.com/Fyhong/p/4574509.html
 *  版本1.0
 *  参数:
 *          bgcolor: "bg-color-blue", -- 按钮背景颜色
 *          bdcolor: "border-color-lighten",--按钮边框
 *          fgcolor: "fg-color-white",--按钮字体颜色
 *          sendURL: "",--上传路径 必填
 *          filedivId: "filesview",--初始化的元素ID 必填
 *          Change: function () { },--选择文件事件
 *          ShowLoad: function () { },--显示缩略图事件
 *          Progress: function () { },--上传中
 *          Readysource: function () { }--上传完成
 *          accept:"image/gif,image/png,image/JPEG"--筛选文件格式
*/
(function ($) {
    $.HBUploadFiles = function (params) {

        var filereaderList = [];
        var deleItems = [];
        var deleitemstemp = [];
        params = $.extend({
            bgcolor: "bg-color-blue",
            bdcolor: "border-color-lighten",
            fgcolor: "fg-color-white",
            sendURL: "",
            maxfilecount: 100,
            filedivId: "filesview",
            accept: "image/gif,image/png,image/JPEG",
            Change: function () { },
            ShowLoad: function () { },
            Progress: function () { },
            Readysource: function () { }
        }, params);
        //删除准备上传集合
        function removeFile(id) {
            var newfilelist = [];
            for (var i = 0; i < filereaderList.length; i++) {
                if (id != filereaderList[i][0]) {
                    newfilelist.push(filereaderList[i]);
                }
            }
            filereaderList = newfilelist;
        }
        //删除数组中的数据
        function removeItem(ary, key) {
            var newary = [];
            for (var i = 0; i < ary.length; i++) {
                if (key != ary[i]) {
                    newary.push(ary[i]);
                }
            }
            ary = newary;
            return ary;
        }

        function isBtnDisabled() {
            var sum = $("#imgdiv > .tile").length - deleitemstemp.length;
            sum = sum < 0 ? 0 : sum;
            var count = $("#imgdiv > .selected").length - deleitemstemp.length;//display: none;
            count = count < 0 ? 0 : count;
            if (sum != count) {
                $("#ckfile").find("span").removeClass("glyphicon-check").addClass("glyphicon-unchecked");
            } else {
                $("#ckfile").find("span").removeClass("glyphicon-unchecked").addClass("glyphicon-check");
            }
            if (sum == 0) {
                $("#ckfile").addClass("disabled").attr("disabled", true);
            } else {
                $("#ckfile").removeClass("disabled").attr("disabled", false);
            }
            if (count == 0) {
                $("#savefile,#delfile").addClass("disabled").attr("disabled", true);
            } else {
                $("#savefile,#delfile").removeClass("disabled").attr("disabled", false);
            }
            $("#ckmsg").text("总量:[" + sum + "]" + "/选中:[" + (count) + "]");
            if (params.maxfilecount >= sum) {
                $("#msg").addClass("fg-color-blue").removeClass("fg-color-red").text('最大浏览上传数量:[ ' + params.maxfilecount + ']')
            } else {
                $("#msg").addClass("fg-color-red").removeClass("fg-color-blue").text("达到了最大浏览上传量,请上传后在选择文件!")
            }
            isRevokeimg();
        }
        function getsize(size) {
            var fileSize = "";
            if (size > 1024 * 1024)
                fileSize = (Math.round(size * 100 / (1024 * 1024)) / 100).toString() + 'MB';
            else
                fileSize = (Math.round(size * 100 / 1024) / 100).toString() + 'KB';
            return fileSize;
        }

        //显示隐藏最后一次删除按钮
        function isRevokeimg() {
            var sumcount = deleItems.length;
            var count = deleitemstemp.length;
            if (sumcount == 0) {
                $("#revokeimg").hide(200);
                deleitemstemp = [];
            }
            if (count > 0) {
                $("#revokeimg").show(200);
            } else {
                $("#revokeimg").hide(200);
            }
        }

        var markup = [
            '<div class="col-lg-12 paddingtop15 clearleft">',
            '<button class=" ' + params.bgcolor + " " + params.bdcolor + " " + params.fgcolor + '" id="btnfile"> <span aria-hidden="true" class="glyphicon glyphicon-th-list"></span>&nbsp;&nbsp; 浏览图片</button>',
            '<input style="display:none;" type="file" multiple="multiple" name="fileImage" id="fileImage" accept="' + params.accept + '" value="" />',
            '<button  disabled="disabled" id="savefile" class=" ' + params.bgcolor + " " + params.bdcolor + " " + params.fgcolor + '"> <span aria-hidden="true" class="glyphicon glyphicon-floppy-open"></span>&nbsp;&nbsp; 上传</button>',
            '<button  disabled="disabled" id="ckfile" class="  ' + params.bgcolor + " " + params.bdcolor + " " + params.fgcolor + ' disabled"> <span aria-hidden="true" class="glyphicon glyphicon-unchecked"></span> &nbsp;&nbsp;全选</button>',
            '<button  disabled="disabled" id="delfile" class=" ' + params.bgcolor + " " + params.bdcolor + " " + params.fgcolor + ' disabled"><span aria-hidden="true" class="glyphicon glyphicon-trash"></span>&nbsp;&nbsp;删除</button>',
            ' <span id="msg" class="fg-color-blue">最大浏览上传数量:[ ' + params.maxfilecount + ']</span>',
            '<button style="display:none;" class="float-right bg-color-white fg-color-blue" id="revokeimg"><span class="glyphicon glyphicon-share-alt"></span> &nbsp;&nbsp;撤销最后一次删除 </button>',
        '</div>',
        '<div id="imgdiv" class="col-lg-12 overflowX ' + params.bdcolor + " " + ' float-left fileshow">',
        '</div>',
        '<span class="float-right" id="ckmsg"></span>'
        ].join('');
        $("#" + params.filedivId).append($(markup)).hide().fadeIn();

        $("#btnfile").click(function () {
            var count = $("#imgdiv > .tile").length - deleitemstemp.length;
            if (params.maxfilecount >= count) {
                $("#fileImage").click();

            } else {
                $("#msg").addClass("fg-color-red").removeClass("fg-color-blue").text("达到了最大浏览上传量,请上传后在选择文件!")
            }
        });
       
            //上传文件
            $("#fileImage").change(function () {
                var files = $(this).get(0);
                var isdel = false;
                var newitems = [];
                var newitemsmp = [];

                var filesum = files.files.length;
                var count = $("#imgdiv > .tile").length - deleitemstemp.length;
                if (params.maxfilecount >= count) {
                    var tmpcount = params.maxfilecount - count;
                    filesum = tmpcount - filesum > 0 ? filesum : tmpcount;
                    
                } else {
                    $("#msg").addClass("fg-color-red").removeClass("fg-color-blue").text("达到了最大浏览上传量,请上传后在选择文件!")
                    return false;
                }

                for (var i = 0; i < filesum; i++) {


                    var file = files.files[i];
                    var id = file.name;

                    //如果有同一个文件,将标记为删除的文件,显示出来,去掉删除标签;
                    var len = deleItems.length;
                    if (len > 0) {
                        //删除集合中的元素
                        for (var i = 0; i < len; i++) {
                            var dt = deleItems[i];
                            if (dt != id) {
                                newitems.push(dt)
                            } else {
                                isdel = true;
                            }
                        }
                        deleItems = newitems;
                        var llen = deleitemstemp.length;
                        //临时删除的元素
                        if (llen > 0) {

                            for (var i = 0; i < llen; i++) {
                                var dtm = deleitemstemp[i];
                                if (dtm != id) {
                                    newitemsmp.push(dtm);
                                }
                            }
                            deleitemstemp = newitemsmp;
                        }
                        isRevokeimg();
                    }
                    //如果有标记删除的,显示出来;
                    if (isdel) {
                        $("img[id='" + id + "']").parent().show(200);
                        isdel = false;
                        continue;
                    }
                    //如果已经存在的数据,显示出来
                    if ($("img[id='" + id + "']").length != 0) {
                        $("img[id='" + id + "']").parent().addClass("selected").show(200);
                        continue;
                    }

                    var reader = new FileReader();
                    reader.readAsDataURL(file);
                    reader.onload = (function (f) {
                        return function (e) {
                            var urlData = this.result;
                            var img = $("<img></img>").attr({ "src": urlData, 'alt': f.name, 'id': f.name });
                            var spn = $("<span class='tile bg-color-lighten icon selected'></span>").append(img);
                            var brand = $("<span></span>").addClass("brand");
                            var spanbar = $("<span></span>").addClass("percentage-bar");
                            var bar = $("<span></span>").addClass("bar bg-color-blue");
                            var sizesapn = $("<span></span>").addClass("token").text(getsize(f.size));
                            brand.append(spanbar.append(bar));
                            brand.append(sizesapn);
                            spn.append(brand);
                            $(spn).click(function () {
                                $(this).toggleClass("selected");
                                isBtnDisabled();
                            });
                            $("#imgdiv").append(spn);
                            $("#ckfile").find("span").removeClass("glyphicon-unchecked").addClass("glyphicon-check");
                            filereaderList.push([f.name, f]);
                            isBtnDisabled();
                            params.ShowLoad();
                        };
                        params.Change();
                    })(file);
                }
            });

            $("#ckfile").click(function () {
                var ion = $(this).find("span");
                if ($(ion).hasClass("glyphicon-check")) {
                    $(ion).removeClass("glyphicon-check").addClass("glyphicon-unchecked");
                    $("#imgdiv > .tile").removeClass("selected");
                } else {
                    $(ion).removeClass("glyphicon-unchecked").addClass("glyphicon-check");
                    $("#imgdiv > .tile").addClass("selected");
                }
                isBtnDisabled();
            });
            $("#revokeimg").click(function () {
                if (deleitemstemp.length == 0) {
                    return false;
                }
                for (var i = 0; i < deleitemstemp.length; i++) {
                    var id = deleitemstemp[i];
                    deleItems = removeItem(deleItems, id);
                    $("img[id='" + id + "']").parent().show(200);
                }
                deleitemstemp = [];
                isBtnDisabled();
            });
            $("#delfile").click(function () {
                var selectimg = $("#imgdiv > .selected");
                if (selectimg.length == 0) {
                    return false;
                }
                deleitemstemp = [];
                var delitem = [];
                $.each(selectimg, function (index, item) {
                    var id = $(item).find("img").attr("id");
                    delitem.push(id);
                    deleitemstemp.push(id);
                    $(item).hide(250);
                });
                //清除掉不能恢复删除状态的图片,并且从准备上传集合中删除
                for (var i = 0; i < deleItems.length; i++) {
                    $("img[id='" + deleItems[i] + "']").parent().remove();
                    removeFile(deleItems[i]);
                }
                deleItems = delitem;
                isBtnDisabled();
            });
            $("#savefile").click(function () {
                //去掉标识为删除的
                //上传选中的文件
                var ckpushItem = [];
                var selectimg = $("#imgdiv > .selected");
                if (selectimg.length == 0) {
                    return false;
                }
                var len = filereaderList.length;
                $.each(selectimg, function (index, item) {
                    var id = $(item).find("img").attr("id");
                   
                    for (var j = 0; j < len; j++) {
                        var iobj = filereaderList[j];
                        if (iobj[0] == id) {

                            var idx = deleitemstemp.indexOf(iobj[0]);
                            if (idx < 0) {
                                ckpushItem.push(iobj);
                            }
                        }
                    }
                });
                for (var i = 0, itemfile; itemfile = ckpushItem[i]; i++) {

                    (function (item) {
                        var id = item[0];
                        var file = item[1];
                        var xhr = new XMLHttpRequest();

                        //上传中
                        xhr.upload.addEventListener("progress", function (e) {
                            if (e.lengthComputable) {
                                var bl = ((e.loaded / e.total) * 100);
                                $("img[id='" + id + "']").parent().find(".bar").css("width", bl + "%");
                                $("img[id='" + id + "']").parent().find(".token").text(bl + "%");
                                params.Progress();
                            }
                        }, false);
                        //上传状态
                        xhr.onreadystatechange = (function (fif) {
                            return function (e) {
                                if (xhr.readyState == 4) {
                                    if (xhr.status == 200) {
                                        removeFile(fif[0]);
                                        $("img[id='" + fif[0] + "']").parent().hide("fast", function () {
                                            $(this).remove();
                                            isBtnDisabled();
                                            params.Readysource();

                                        });
                                    } else if (xhr.status == 404) {
                                        $("img[id='" + fif[0] + "']").parent().find(".token").text("404!");

                                    } else {
                                        $("img[id='" + fif[0] + "']").parent().find(".token").text(xhr.status + "!");
                                    }
                                }
                            };
                        })(item);
                        var formdata = new FormData();
                        formdata.append("FileData", file);
                        xhr.open("POST", params.sendURL, true);
                        xhr.send(formdata);
                    })(itemfile);
                }
        });
    }
})(jQuery);

3.后台:

public void SaveIFle(HttpPostedFileBase[] FileData)
        {
            foreach (var item in FileData)
            {
                _saveFile(item, "/Images/ABC", item.FileName);
                
            }
        }
        [NonAction]
        private void _saveFile(HttpPostedFileBase postedFile, string filepath, string saveName)
        {
            string phyPath = Request.MapPath("~" + filepath + "/");
            if (!Directory.Exists(phyPath))
            {
                Directory.CreateDirectory(phyPath);
            }
            try
            {
                postedFile.SaveAs(phyPath + saveName);
            }
            catch (Exception e)
            {
                throw new ApplicationException(e.Message);

            }
        }

调用:

初始化:

fileshow.js中初始化

$(function () {
    $.HBUploadFiles({
        sendURL: "/FY/SaveIFle",
        filedivId: "filesview"
    });
});

 

<div class="row">
    <div class="col-lg-6  bg-color-white " id="filesview">

    </div>

</div>


@section scripts{

    <script src="~/Scripts/Js/HBUploadFiles.js"></script>
    <script src="~/Scripts/Js/fileshow.js"></script>
}

 

出处:http://www.cnblogs.com/fyhong

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

posted @ 2015-06-14 03:34  键盘上的考拉  阅读(2262)  评论(0编辑  收藏  举报