用webuploader上传图片并预览(上传文件)

1、首先在这个网站下载控件包,并引入网站。

http://fex.baidu.com/webuploader/?qq-pf-to=pcqq.c2c

根据网站说明和自己的需求取用不同的文件。

我是用了这么几个(swf css js 这三个都是要用的,就是看你选择哪个版本,由于我要写jquery来,也引用了jquery):

2、写jquery函数,来实现,在此我参照了网站和别人写的demo,最终合成了一个既能上传图片并预览的代码。

红色标记是必须要改的路径,路径别写错

 

// 文件上传
jQuery(function () {
    var $ = jQuery,
        $list = $('#thelist'),
        $btn = $('#ctlBtn'),
        state = 'pending',
         ratio = window.devicePixelRatio || 1,
// 缩略图大小
thumbnailWidth = 100 * ratio,
thumbnailHeight = 100 * ratio,
        uploader;
  
    uploader = WebUploader.create({

        // 不压缩image
        resize: false,

        // swf文件路径
        swf: 'webUploader/Uploader.swf',

        // 文件接收服务端。
        server: '../UploadHandlers.ashx',
        fileNumLimit: 1,//设置可上传文件数量

        // 选择文件的按钮。可选。
        // 内部根据当前运行是创建,可能是input元素,也可能是flash.
        pick: '#picker',
        // 只允许选择文件,可选。
        accept: {
            title: 'Images',
            extensions: 'gif,jpg,jpeg,bmp,png',
            mimeTypes: 'image/*'
        }
    });

    // 当有文件添加进来的时候
    uploader.on('fileQueued', function (file) {
        var $li = $(
       '<div id="' + file.id + '" class="file-item thumbnail">' +
           '<img>' +
           '<div id="info" runat="server">' + file.name + '</div>' +
            '<p class="state">等待上传...</p>' +
       '</div>'
       ),
   $img = $li.find('img');

        $list.append($li);

        // 创建缩略图
        uploader.makeThumb(file, function (error, src) {
            if (error) {
                $img.replaceWith('<span>不能预览</span>');
                return;
            }

            $img.attr('src', src);
        }, thumbnailWidth, thumbnailHeight);
    });

    // 文件上传过程中创建进度条实时显示。
    uploader.on('uploadProgress', function (file, percentage) {
        var $li = $('#' + file.id),
            $percent = $li.find('.progress .progress-bar');

        // 避免重复创建
        if (!$percent.length) {
            $percent = $('<div class="progress progress-striped active">' +
              '<div class="progress-bar" role="progressbar" style="width: 0%">' +
              '</div>' +
            '</div>').appendTo($li).find('.progress-bar');
        }

        $li.find('p.state').text('上传中');

        $percent.css('width', percentage * 100 + '%');
    });

    uploader.on('uploadSuccess', function (file) {
        $('#' + file.id).find('p.state').text('已上传');
    });

    uploader.on('uploadError', function (file) {
        $('#' + file.id).find('p.state').text('上传出错');
    });

    uploader.on('uploadComplete', function (file) {
        $('#' + file.id).find('.progress').fadeOut();
    });

    uploader.on('all', function (type) {
        if (type === 'startUpload') {
            state = 'uploading';
        } else if (type === 'stopUpload') {
            state = 'paused';
        } else if (type === 'uploadFinished') {
            state = 'done';
        }

        if (state === 'uploading') {
            $btn.text('暂停上传');
        } else {
            $btn.text('开始上传');
        }
    });

    $btn.on('click', function () {
        if (state === 'uploading') {
            uploader.stop();
        } else {
            uploader.upload();
        }
        $("#lb").val($("#info").text());//这里是把文件名赋值给标签
    });

    
});
//下面是鼠标放上去的效果,可以无视
function mouseO() {
    $("#ctlBtn").addClass("webuploader-pick-hover");
}

function mouseOt() {
    $("#ctlBtn").removeClass("webuploader-pick-hover");
}

 

 3、一般处理程序 ajax接口,用来接收前台提交的图片,上传上去。

红色标记部分也是必须要改的路径,是用来存图片的

<%@ WebHandler Language="C#" Class="UploadHandlers" %>

using System;
using System.Web;

public class UploadHandlers : IHttpHandler {
    
    public void ProcessRequest (HttpContext context) {
        context.Response.ContentType = "text/plain";
        context.Response.ContentEncoding = System.Text.Encoding.UTF8;
        if (context.Request["REQUEST_METHOD"] == "OPTIONS")
        {
            context.Response.End();
        }
        SaveFile();
    }
    private void SaveFile()
    {
        string basePath = "./File/";
        string name;
        basePath = System.Web.HttpContext.Current.Server.MapPath(basePath);
        HttpFileCollection files = System.Web.HttpContext.Current.Request.Files;
        if (!System.IO.Directory.Exists(basePath))
        {
            System.IO.Directory.CreateDirectory(basePath);
        }
        var suffix = files[0].ContentType.Split('/');
        //获取文件格式
        //var _suffix = suffix[1].Equals("jpeg", StringComparison.CurrentCultureIgnoreCase) ? "" : suffix[1];
        var _suffix=suffix[1];
        var _temp = System.Web.HttpContext.Current.Request["name"];
        //如果不修改文件名,则创建随机文件名
        if (!string.IsNullOrEmpty(_temp))
        {
            name = _temp;
        }
        else
        {
            Random rand = new Random(24 * (int)DateTime.Now.Ticks);
            name = rand.Next() + "." + _suffix;
        }
        //文件保存
        var full = basePath + name;
        files[0].SaveAs(full);
        var _result = "{\"jsonrpc\" : \"2.0\", \"result\" : null, \"id\" : \"" + name + "\"}";
        System.Web.HttpContext.Current.Response.Write(_result);


    }

    public bool IsReusable {
        get {
            return false;
        }
    }

}

  4、前台代码

首先是引用文件

记得修改路径,fileUpload.js是写的jquery函数的文件

<script src="/webUploader/jquery-1.7.1.min.js"></script>
    <link href="/webUploader/webuploader.css" rel="stylesheet" />
    <script src="/webUploader/webuploader.nolog.js"></script>
    <script src="/fileUpload.js"></script>

接下来实现代码

<div id="uploader" runat="server" class="wu-example">
        <!--用来存放文件信息-->
        <div id="thelist" class="uploader-list"></div>        
        <div class="btns">
        <div id="picker">选择图片</div>
        <div id="ctlBtn" class="webuploader-pick" onmouseover="mouseO();" onmouseout="mouseOt();" >开始上传</div>
        </div>
        <input id="lb" type="hidden" runat="server" />//用标签来存储文件名,试过很多方式,最终认为这种方式比较好
        </div>

5、后台获取前台文件名

Request.Form["lb"] 即是标签的值。

可通过拼接路径来存入数据库。

 

基本上只要把路径修改好,就能够直接用了

posted @ 2017-03-30 00:02  Ivan99  阅读(4966)  评论(0编辑  收藏  举报