06.LoT.UI 前后台通用框架分解系列之——浮夸的图片上传

简介:

LOT.UI分解系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#lotui

LoT.UI开源地址如下:https://github.com/dunitian/LoTCodeBase/tree/master/LoTUI

先看在LoT.UI里面的应用效果图:

懒人福利:http://www.cnblogs.com/dunitian/p/5535455.html(一句代码直接实现)

关键代码解析:(https://github.com/dunitian/LoTCodeBase/tree/master/NetCode/3.常用技能/02.uploader系列/01.Webuploader

JS部分:

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
< script  type="text/javascript">
         //1.uploader初始化。 auto-是否自动上传
         var uploader = WebUploader.create({
             server: '/Home/Upload',
             swf: '/open/webuploader/Uploader.swf',
             pick: '#lot-picker',
             auto: true,                     //自动上传
             //chunked: true,                //断点续传-单个默认5M
             duplicate: false,               //文件去重
             prepareNextFile: true,          //提前准备下一个文件(可选,单文件不建议开)
             //formData: { },                //自定义参数表,每次请求都会发送这些参数
             paste: document.body,           //启动剪贴板(可选)
             dnd: $('#lot-uploader'),        //启动拖拽(可选)
             fileNumLimit: 5,                //文件总数量
             fileSingleSizeLimit: 10485760,  //单个文件最大值(IIS默认<=4M,可自行设置:httpRuntime的maxRequestLength)
             accept: {
                 title: 'Images',
                 extensions: 'gif,jpg,jpeg,bmp,png',
                 mimeTypes: 'image/*'
             }
         });
 
         //2.文件添加时,添加样式和缩略图
         uploader.on('fileQueued', function (file) {
             var $li = $(
                     '< div  id="' + file.id + '" class="file-item thumbnail">' +
                         '< img >' +
                         '< div  class="info info-top">Szie:' + Math.floor(file.size / 1024) + 'kb' + '</ div >' +
                         '< div  class="info info-bot">' + file.name + '</ div >' +
                     '</ div >'
                     ),
                 $img = $li.find('img');
             $('#lot-filelist').append($li);
             // 创建缩略图
             uploader.makeThumb(file, function (error, src) {
                 if (error) {
                     $img.replaceWith('< span >不能预览</ span >');
                     return;
                 }
                 $img.attr('src', src);
             }, 100, 100);
             ////计算文件MD5(可加)
             //uploader.md5File(file).then(function (val) {
             //    console.log('md5:',val,'-',file.name);
             //});
         });
 
         //3.文件上传过程中创建进度条实时显示。
         uploader.on('uploadProgress', function (file, percentage) {
             var $li = $('#' + file.id),
                 $percent = $li.find('.progress span');
             //避免重复创建
             if (!$percent.length) {
                 $percent = $('< p  class="progress">< span ></ span ></ p >').appendTo($li).find('span');
             }
             $percent.css('width', percentage * 100 + '%');
         });
 
         //4.文件上传成功,给item添加成功class, 用样式标记上传成功。
         uploader.on('uploadSuccess', function (file, data) {
             if (data.status) {
                 $('#' + file.id).addClass('upload-state-done');
             } else {
                 showMsg(file, data.msg);
             }
         });
 
         //5.失败系列的处理
         //5.1添加失败处理
         uploader.on('error', function (log) {
             switch (log) {
                 case 'F_EXCEED_SIZE':
                     addMsg('文件10M以内'); break;
                 case 'Q_EXCEED_NUM_LIMIT':
                     addMsg('已超最大上传数'); break;
                 case 'Q_TYPE_DENIED':
                     addMsg('文件类型不正确'); break;
                 case 'F_DUPLICATE':
                     addMsg('文件已经被添加'); break;
                 default:
                     addMsg('文件添加失败~'); break;
             }
         });
         //5.2上传失败处理
         uploader.on('uploadError', function (file) {
             showMsg(file, '上传失败');
         });
 
         //错误信息显示
         function showMsg(file, msg) {
             var $li = $('#' + file.id), $error = $li.find('div.error');
             //避免重复创建
             if (!$error.length) {
                 $error = $('< div  class="error"></ div >').appendTo($li);
             }
             $error.text(msg);
         }
         //错误信息提示
         function addMsg(msg) {
             $('#lot-uploader').prepend('< h3  class="temp-log" style="color:red;">' + msg + '</ h3 >')
             setTimeout(function () {
                 $('.temp-log').remove();
             }, 2000);
         }
     </ script >

后端代码:

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 });
         }

开源组件:https://github.com/fex-team/webuploader

扩展组件:https://github.com/dunitian/LoTUploader


本文转自毒逆天博客园博客,原文链接:http://www.cnblogs.com/dunitian/p/5535431.html,如需转载请自行联系原作者


相关文章
|
2月前
|
Rust JavaScript 前端开发
ES6 awaitRust UI 框架
ES6 awaitRust UI 框架
34 0
|
2月前
|
前端开发 JavaScript
electron ui框架
Electron是一个使用JavaScript, HTML和CSS等前端技术构建跨平台桌面应用程序的框架。
169 0
|
30天前
|
数据采集 人工智能 自然语言处理
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Midscene.js 是一款基于 AI 技术的 UI 自动化测试框架,通过自然语言交互简化测试流程,支持动作执行、数据查询和页面断言,提供可视化报告,适用于多种应用场景。
276 1
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
|
2月前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
151 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
2月前
|
Rust 自然语言处理 API
|
2月前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
3月前
|
开发框架 JavaScript 前端开发
鸿蒙NEXT开发声明式UI是咋回事?
【10月更文挑战第15天】鸿蒙NEXT的声明式UI基于ArkTS,提供高效简洁的开发体验。ArkTS扩展了TypeScript,支持声明式UI描述、自定义组件及状态管理。ArkUI框架则提供了丰富的组件、布局计算和动画能力。开发者仅需关注数据变化,UI将自动更新,简化了开发流程。此外,其前后端分层设计与编译时优化确保了高性能运行,利于生态发展。通过组件创建、状态管理和渲染控制等方式,开发者能快速构建高质量的鸿蒙应用。
187 3
|
1月前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
1月前
|
XML 搜索推荐 前端开发
安卓开发中的自定义视图:打造个性化UI组件
在安卓应用开发中,自定义视图是一种强大的工具,它允许开发者创造独一无二的用户界面元素,从而提升应用的外观和用户体验。本文将通过一个简单的自定义视图示例,引导你了解如何在安卓项目中实现自定义组件,并探讨其背后的技术原理。我们将从基础的View类讲起,逐步深入到绘图、事件处理以及性能优化等方面。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。
|
2月前
|
开发框架 JavaScript 前端开发
HarmonyOS UI开发:掌握ArkUI(包括Java UI和JS UI)进行界面开发
【10月更文挑战第22天】随着科技发展,操作系统呈现多元化趋势。华为推出的HarmonyOS以其全场景、多设备特性备受关注。本文介绍HarmonyOS的UI开发框架ArkUI,探讨Java UI和JS UI两种开发方式。Java UI适合复杂界面开发,性能较高;JS UI适合快速开发简单界面,跨平台性好。掌握ArkUI可高效打造符合用户需求的界面。
172 8

热门文章

最新文章