1 概述

  编写后台网站程序大多数用到文件上传,可是传统的文件上传控件不是外观不够优雅,就是性能不太好看,翻阅众多文件上传控件的文章,发现可以这样去定义一个文件上传控件,实现的文件上传的效果图如下:

2、该图片上传插件实现功能如下:

  1>能够异步上传,上传成功之后,服务器返回响应结果;能够定义上传前和上传后自定义处理方式;

  2>能够实现文件格式判断,过滤非图片文件;

  3>服务端能够过滤重复上传的图片;

3、页面代码分析:

  1>、Jquery图片上传插件代码如下:

// 选中文件, 提交表单(开始上传)
(function ($) {
var iframe;
var form;
var opeartData=null; $.uploadDefault = {
url: '',
fileName: 'filedata',
dataType: 'json',
imgshow: '',
onSend: function(){ return true; },
onSubmit: function () { return true; },
onComplate: function () { return true; }
}; $.UpLoadForm = { //图片格式验证
$PicChange: function (obj)
{
if (opeartData.imgshow != null && opeartData.imgshow != '')
{
$("#" + opeartData.imgshow).val($(obj).val());
}
}, //判断pic格式是否正确
$IsPicCheck: function (fileName)
{
if (fileName != null && fileName != "") {
//lastIndexOf如果没有搜索到则返回为-1
if (fileName.lastIndexOf(".") != -) {
var fileType = (fileName.substring(fileName.lastIndexOf(".") + , fileName.length)).toLowerCase();
var suppotFile = new Array();
suppotFile[] = "jpg";
suppotFile[] = "gif";
suppotFile[] = "bmp";
suppotFile[] = "png";
suppotFile[] = "jpeg";
for (var i = ; i < suppotFile.length; i++) {
if (suppotFile[i] == fileType) {
return true;
} else {
continue;
}
}
return false;
} else {
return false;
}
}
}, $ImgUpLoad: function () {
if (opeartData == null)
{
//没有选择图片或者图片已经上传
return;
}
opeartData = $.extend($.uploadDefault, opeartData);
var canSend = opeartData.onSend();
if (!canSend) {
return;
}
if (!opeartData.onSubmit())//图片验证
{
return;
}
form.submit();
iframe.load(function() {
var contents = $(this).contents().get();
var data = $(contents).find('body').text();
if ('json' == opeartData.dataType) {
data = window.eval('(' + data + ')');
}
opeartData.onComplate(data);
setTimeout(function() {
iframe.remove();
form.remove();
opeartData = null;
}, );
});
}, $OpenFIle: function (options) {
opeartData = $.extend($.uploadDefault, options);
if (opeartData.url == '') {
return;
}
var frameName = 'upload_frame_0';
var formName = 'upload_form_0';
if ($("#" + formName).length > ) {
iframe = $("#" + frameName);
form = $("#" + formName);
}
else {
iframe = $('<iframe style="position:absolute;top:-9999px" id="' + frameName + '" />').attr('name', frameName);
form = $('<form method="post" style="display:none;" id="' + formName + '" enctype="multipart/form-data" />').attr('name', 'form_' + frameName);
form.attr("target", frameName).attr('action', opeartData.url);
// form中增加数据域
var formHtml = '<input type="file" name="' + opeartData.fileName + '" onchange="$.UpLoadForm.$PicChange(this)")"/>';
form.append(formHtml);
iframe.appendTo("body");
form.appendTo("body");
}
var fileInput = $('input[type=file][name=' + opeartData.fileName + ']', form);
fileInput.click();
}
}
})(jQuery);

  2>前台页面调用代码如下,Jquery插件,别忘记引入Jquery对应js:

<script type="text/javascript">
$(function () {
$("#imagetx").bind("click", function () {
$.UpLoadForm.$OpenFIle({
// 上传地址
url: '../upload/UploadImg',
// 文件域名字
fileName: 'upimage',
// 其他表单数据
imgshow: 'imagetx',
// 上传完成后, 返回json, text
dataType: 'json',
// 上传之前回调,return true表示可继续上传
onSend: function () {
$.ShowLoadDialog();
return true;
},
onSubmit: function () {
var picpath = $("#imagetx").val();
console.log(picpath);
if (!$.UpLoadForm.$IsPicCheck(picpath))
{
$.ShowLoadDialogClose();
$TipDialog("图片上传", "请上传jpg、gif、bmp、png、jpeg格式的图片!");
return false;
}
return true;
},
// 上传之后回调
onComplate: function (data) {
$.ShowLoadDialogClose();
if (data != null)
{
console.log(data)
if (data.errorcode == "") {
$("#showpic").attr("src", data.picurl);
}
else {
$TipDialog("图片上传", "图片上传失败");
}
}
}
});
});
$("#btnupload").bind("click", function () {
$.UpLoadForm.$ImgUpLoad();
}) });
</script>

  3>后台服务器验证:

        [HttpPost]
public JsonResult UploadImg(HttpPostedFileBase upimage)
{
string pic = "", error = "",pcode="";
try
{
if (upimage != null)
{
string fileName = DateTime.Now.ToString("yyyyMMdd") + System.IO.Path.GetFileName(upimage.FileName);
string[] pictext = { ".jpg",".gif",".bmp",".png",".jpeg" };
string extenname= System.IO.Path.GetExtension(fileName);
if (pictext.Contains(extenname))
{
string filePhysicalPath = Server.MapPath("~/Upload/Images/" + fileName);
upimage.SaveAs(filePhysicalPath);
pic = "/Upload/Images/" + fileName;
}
else
{
error = "";
pic =pic ;
}
}
}
}
catch (Exception ex)
{
error = ex.Message;
}
return Json(new
{
errorcode = error,
picurl = pic,
piccode = pcode
});
}

图片上传也就完成,展示的效果也如上面所示;

Jquery自定义图片上传插件的更多相关文章

  1. CKEditor5 + vue2.0 自定义图片上传、highlight、字体等用法

    因业务需求,要在 vue2.0 的项目里使用富文本编辑器,经过调研多个编辑器,CKEditor5 支持 vue,遂采用.因 CKEditor5 文档比较少,此处记录下引用和一些基本用法. CKEdit ...

  2. 赞!带进度条的 jQuery 文件拖放上传插件

    jQuery File Uploader 是一个 jQuery 文件拖放上传插件,包括 Ajax 上传和进度条效果.作者编写这个插件的想法是要保持它非常简单,不像其他的插件,很多的标记,并提供一些 H ...

  3. WebUploader文件图片上传插件的使用

    最近在项目中用到了百度的文件图片上传插件WebUploader.分享给大家 需要在http://fex.baidu.com/webuploader/download.html点击打开链接下载WebUp ...

  4. jquery uploadify文件上传插件用法精析

      jquery uploadify文件上传插件用法精析 CreationTime--2018年8月2日11点12分 Author:Marydon 一.参数说明 1.参数设置 $("#fil ...

  5. 带进度条的 jQuery 文件拖放上传插件

    jQuery File Uploader :jQuery File Uploader 是一个 jQuery 文件拖放上传插件 兼容性判断 下载:https://github.com/danielm/u ...

  6. ueditor 百度编辑器 自定义图片上传路径和格式化上传文件名

    今天项目中需要自定义图片上传的保存路径,并且不需要按照日期自动创建存储文件夹和文件名,我的ueditor版本是1.3.6.下面记录一下我配置成功的方法,如果有什么不对的地方欢迎指出,共同学习: 1:我 ...

  7. Aps.net中基于bootstrapt图片上传插件的应用

    Aps.net中基于bootstrapt图片上传插件的应用 在最近的项目中需要使用一个图片上传的功能,而且是多张图片同时上传到服务器的文件夹中,将图片路径存放在数据库中.为了外观好看使用了bootst ...

  8. ssm项目中KindEditor的图片上传插件,浏览器兼容性问题

    解决办法: 原因:使用@ResponseBody注解返回java对象,在浏览器中是Content-Type:application/json;charset=UTF-8 我们需要返回字符串(Strin ...

  9. ueditor图片上传插件的使用

    在项目里使用到ueditor图片上传插件,以前图片上传都是直接使用js代码直接上传图片,比较麻烦,而且效率也比较低,而ueditor这款插件完美的解决了这个问题,这个是百度开发的一款富文本编辑器,在这 ...

随机推荐

  1. Android中的四种动画(一)

    TweenAnimation 变换动画(也叫作"补间动画"),有四种(alpha scale translate rote). FrameAnimation(也叫DrawableA ...

  2. BZOJ 1068: [SCOI2007]压缩

    Sol 区间DP.这个区间DP需要三维, \(f[i][j][k]\) 表示\([i,j]\) 这个区间中是否存在 \(M\) . 转移有两种,一种是这个区间存在 \(M\) ,那么直接枚举 \(M\ ...

  3. Python自动化之YAML解析

    准备工作 pip install PyYAML import yaml yaml语法规则 想要表示列表项,使用一个短横杠加一个空格.多个项使用同样的缩进级别作为同一列表的一部分 my_dictiona ...

  4. ndk学习5: ndk中使用c++

    默认情况下ndk不支持标准C++库,异常, rtti等   在ndk文档有关于C++ support的详细介绍   一. 使用C++标准库 介绍: 默认是使用最小额度的C++运行时库, 在Applic ...

  5. igbinary vs serialize vs json_encode

    igbinary vs serialize vs json_encode 2010-04-18 @ 23:01:58 · 作者 Volcano · 归类于 php 你可能会感兴趣的内容 关于" ...

  6. 基础知识《七》---Java多线程详解

  7. freemodbus-v1.5.0 源码分析

    注:转载请注明出处   http://www.cnblogs.com/wujing-hubei/p/5935142.html FreeModbus协议栈作为从机,等待主机传送的数据,当从机接收到一帧完 ...

  8. Python模块之optparse

    参考: http://www.cnblogs.com/captain_jack/archive/2011/01/11/1933366.html https://docs.python.org/2/li ...

  9. jsp自定义标签(时间格式化包括Long转时间)

    1.jsp自带标签的格式化: jstl fmt 函数大全:主要针对格式化功能 Tags   fmt:requestEncoding fmt:setLocale fmt:timeZone fmt:set ...

  10. python判断文件和文件夹是否存在

    import osos.path.isfile('test.txt') #如果不存在就返回Falseos.path.exists(directory) #如果目录或文件不存在就返回False