【开源】1句代码搞定图片批量上传,无需什么代码功底【无语言界限】

简介:

开源地址:https://github.com/dunitian/LoTUploader

WebUploader基础上的封装改善,一句代码全部实现(样式美化,实例JS优化(配置优化,样式调整,名称+大小显示,错误处理等),后端代码。。。。。)

 效果:(完整demo:https://github.com/dunitian/LoTUploader/tree/V1.0.1/Demo

一句代码:$.lotuploader('lot-uploader', '/Home/Upload'); //必填参数:ID,Server地址 (完整案例看Demo部分)

第一步:引入样式

<link href="Scripts/lotUploader/lotuploader1.0.1.min.css" rel="stylesheet" />

第二步:自己定义一个DIV(id名任意)

<div id="lot-uploader"></div>

第三步:引入脚本

<script src="http://cdn.bootcss.com/jquery/1.10.2/jquery.min.js"></script>
<script src="Scripts/lotUploader/lotuploader1.0.1.min.js"></script>

代码部分:

<script type="text/javascript">

$.lotuploader({
  lotDocId: 'lot-uploader', //ID
  lotUrl: '/Home/Upload', //服务器Post地址
});

</script>

单文件处理:

$.lotuploader({
        lotDocId: 'lot-uploader',
        lotUrl: '服务器Post地址',
        oneFile: true,
        fileSize: 1024 * 1024 * 5,
        btnStr: '点我就上传默认展图',
        lotSuccessFunc: function (file,data) {
            //方法主体
        },
        lotErrorFunc: function (msg) {
            $('#lot-uploader').append('<div class="lot-temp" style="color:red">' + msg + '</div> ');
            setTimeout(function () {
                $('.lot-temp').remove();
            }, 2000);
        }
    });

后端实例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/// <summary>
         /// 图片上传
         /// </summary>
         /// <returns></returns>
         public  JsonResult Upload(HttpPostedFileBase file)
         {
             if  (file ==  null ) {  return  Json( new  { status =  false , msg =  "图片提交失败"  }); }
             if  (file.ContentLength > 10485760) {  return  Json( new  { status =  false , msg =  "文件10M以内"  }); }
             string  filterStr =  ".gif,.jpg,.jpeg,.bmp,.png" ;
             string  fileExt = Path.GetExtension(file.FileName).ToLower();
             if  (!filterStr.Contains(fileExt)) {  return  Json( new  { status =  false , msg =  "图片格式不对"  }); }
             //防止黑客恶意绕过,从根本上判断下文件后缀
             if  (!file.InputStream.CheckingExt())
             {
                 //todo:一次危险记录
                 return  Json( new  { status =  false , msg =  "图片格式不对"  });
             }
             //todo: md5判断一下文件是否已经上传过,如果已经上传直接返回 return Json(new { status = true, msg = sqlPath });
 
             string  path =  string .Format( "{0}/{1}" "/lotFiles" , DateTime.Now.ToString( "yyyy-MM-dd" ));
             string  fileName =  string .Format( "{0}{1}" , Guid.NewGuid().ToString( "N" ), fileExt);
             string  sqlPath =  string .Format( "{0}/{1}" , path, fileName);
             string  dirPath = Request.MapPath(path);
 
             if  (!Directory.Exists(dirPath)) { Directory.CreateDirectory(dirPath); }
             try
             {
                 //todo:缩略图
                 file.SaveAs(Path.Combine(dirPath, fileName));
                 //todo: 未来写存数据库的Code
             }
             catch  return  Json( new  { status =  false , msg =  "图片保存失败"  }); }
             return  Json( new  { status =  true , msg = sqlPath });
         }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/// <summary>
     /// 判断扩展名是否是指定类型---默认是判断图片格式,符合返回true(没有释放stream,请手动:file.InputStream.Dispose();)
     /// eg:图片+压缩+文档:"7173", "255216", "6677", "13780", "8297", "55122", "8075", "208207"
     /// eg:img,"7173", "255216", "6677", "13780" //gif  //jpg  //bmp //png
     /// eg:file,"8297", "55122", "8075", "208207" //rar //7z //zip + 文档系列
     /// </summary>
     /// <param name="stream">文件流</param>
     /// <param name="fileTypes">文件扩展名</param>
     /// <returns></returns>
     public  static  bool  CheckingExt( this  Stream stream,  params  string [] fileTypes)
     {
         if  (fileTypes ==  null  || fileTypes.Length == 0) { fileTypes =  new  string [] {  "7173" "255216" "6677" "13780"  }; }
         bool  result =  false ;
         string  fileclass =  "" ;
 
         #region 读取头两个字节
         var  reader =  new  BinaryReader(stream);
         byte [] buff =  new  byte [2];
         try
         {
             reader.Read(buff, 0, 2); //读取每个文件的头两个字节
             fileclass = buff[0].ToString() + buff[1].ToString();
         }
         catch  (System.Exception ex) { stream.Dispose(); reader.Dispose();  return  false ; }
         #endregion
 
         #region 校验
         for  ( int  i = 0; i < fileTypes.Length; i++)
         {
             if  (fileclass == fileTypes[i])
             {
                 result =  true ;
                 break ;
             }
         }
         #endregion
         return  result;
     }

 

注意点:

如果你项目并不使用font-awesome,那请吧.upload-state-done:after样式修改一下,这样成功后就很明了

案例没有采用纯Net语法,只是把服务端处理用Net处理了下。index.html部分通用



CDN地址:

https://cdn.rawgit.com/dunitian/LoTUploader/master/Dist/progress.png

https://cdn.rawgit.com/dunitian/LoTUploader/master/Dist/lotuploader.swf

https://cdn.rawgit.com/dunitian/LoTUploader/master/Dist/lotuploader.min.css

https://cdn.rawgit.com/dunitian/LoTUploader/master/Dist/lotuploader1.0.2.min.js

 

,如需转载请自行联系原作者

相关实践学习
Serverless极速搭建Hexo博客
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
4月前
|
机器学习/深度学习 算法 计算机视觉
完全让ChatGPT写一个风格迁移的例子,不改动任何代码
完全让ChatGPT写一个风格迁移的例子,不改动任何代码
39 1
|
3月前
|
Python
告别混乱!Python上下文管理器的自定义实践,让你的代码更加整洁有序
【7月更文挑战第6天】Python的上下文管理器通过`__enter__`和`__exit__`方法自动处理资源的获取与释放,如文件操作。使用with语句结合自定义类(如`FileManager`示例),能确保文件在使用后正确关闭,防止资源泄漏,提升代码整洁度和健壮性。自定义上下文管理器是代码模块化和错误处理的好实践。
26 0
|
5月前
|
XML JavaScript 前端开发
使用 doscify 将文章写成文档一般丝滑
使用 doscify 将文章写成文档一般丝滑
116 0
|
5月前
|
前端开发 算法 JavaScript
【新手解答3】深入探索 C 语言:头文件提供必要的接口、源文件保持实现细节的私有性 + 进一步学习的方向 + 如何快速编写程序并最终能制作小游戏
【新手解答3】深入探索 C 语言:头文件提供必要的接口、源文件保持实现细节的私有性 + 进一步学习的方向 + 如何快速编写程序并最终能制作小游戏
122 0
|
11月前
|
设计模式 自然语言处理 程序员
ChatGPT函数调用初体验:让ChatGPT具备抓取网页文本的能力
这篇文章总结了使用ChatGPT提升程序员编程能力的方法和场景。作者经过两个月的使用发现,虽然ChatGPT目前还无法完全替代程序员在一些强上下文的编程场景下的能力,但在一些通用化的编程场景下,它的表现仍然可行。作者提炼出以下利用ChatGPT的场景
167 0
|
数据安全/隐私保护
谈一谈|文档加水印的常见做法
谈一谈|文档加水印的常见做法
112 1
工作中需要牢记的基础知识点:直接在word粘贴的自己的笔记,后期转为文字细化
工作中需要牢记的基础知识点:直接在word粘贴的自己的笔记,后期转为文字细化
80 0
工作中需要牢记的基础知识点:直接在word粘贴的自己的笔记,后期转为文字细化
|
算法
第七章 多用模板专注设计(上)
第七章 多用模板专注设计
95 0
第七章 多用模板专注设计(上)
|
数据采集 消息中间件 分布式计算
最终整体回顾总结(代码-预处理及爬虫识别)|学习笔记
快速学习最终整体回顾总结(代码-预处理及爬虫识别)
119 0
最终整体回顾总结(代码-预处理及爬虫识别)|学习笔记
下一篇
无影云桌面