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. Opencv二值图像的分布直方图

    Mat img; ]; int main() { VideoCapture video(); if (!video.isOpened()) { ; } Mat img; Mat img1, img2, ...

  2. [转]Mysql海量数据存储和解决方案之一—分布式DB方案

    1)  分布式DB水平切分中用到的主要关键技术:分库,分表,M-S,集群,负载均衡 2) 需求分析:一个大型互联网应用每天几十亿的PV对DB造成了相当高的负载,对系统的稳定性的扩展性带来极大挑战. 3 ...

  3. C#的contextMenuStrip右键没反应的可能原因

    contextMenuStrip设置右键菜单,但是新手常常忽略一个问题,我要遇到了,即没有设置contextMenuStrip所在控件的contextMenuStrip属性,需要把contextMen ...

  4. Asp.net MVC中Html.Partial, RenderPartial, Action,RenderAction 区别和用法

    Partial 和RenderPartial:这两个的性质都是一样, 只指把一个个View给镶入进来, 只是回传值有点不一样Partial 回传的一个Object (MvcHtmlString), 回 ...

  5. splice 很好用

    splice 类似一个 copy pos 和 delete的组合拳,用起来很方便. arrayObject.splice(index,howmany,item1,.....,itemX) // ind ...

  6. struts2 提供的校验器列表

  7. 77 找出最大连续自然数个数[Longest Consecutive Sequence in an Unsorted Array]

    [本文链接] http://www.cnblogs.com/hellogiser/p/Longest-Consecutive-Sequence-in-an-Unsorted-Array.html [题 ...

  8. iOS 小经验:UIAnimation空对象导致crash

    今天调试一个老程序,发现有时运行动画会crash,仔细检查了基本的内存管理,发现都没问题!后来发现了问题,这个程序用的是下面的代码 [self performSelectorInBackground: ...

  9. 针对跑MySQL的Linux优化【转】

    本文来自:http://www.mysqlsupport.cn/linux-performance-tuning-tips-mysql/ 因为很多MySQL的生产环境都在Linux下,我决定指出一些L ...

  10. 【leetcode】 Search a 2D Matrix (easy)

    Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...