类百度富文本编辑器文件上传。

在项目安开发中,有一个需求是用户需上传特定的text文件,根据此文件判断设备的状态。

以上是需求,此时需要在页面上用到文件上传的功能,原始的文件上传样式不好看,自己此段时间一直都在用layui前端框架写页面,本想用layui官网上给的文件上传功能的,但是经理说上传的文件不能只显示文件名,

还要配上一张图片。layui上传文件的模式都是

显然这个版本的文件上传还没有符合项目的需要。

在接下来的对比中,看到了百度富文本编辑器的文件上传和图片上传样式
      

因为这个功能是在百度富文本编辑器工具栏中的,想要用这个功能,第一就是需要中上传文件是在编辑内容的情况下,配置百度富文本自定义上传。 第二就是看它的源码,自己分析把这个功能剥离出来。

无奈里面的配置信息有点多,只好在网上查看相关的类百度富文本编辑器上传单独使用的功能,看到了一篇文章正是讲单独使用百度富文本编辑器文件上传和图片上传的。具体是看谁的博客的我也给忘了,反正是按照Ta说的自己动手试了试还可以,

在这里先简单说下实现过程:

首先下载百度富文本,下载完解压后放在自己web项目webapps下面。

接下来是写一个简单的demo.jsp页面

一定要引入相应的ueditor.config.js和ueditor.all.js。

原文上是写的附件上传和图片上传两个的,但是用于需要,我只测试了附件上传,所以这里的代码也都是针对附件上传的。

处理相应的js配置:

js代码为:

 1 <script type="text/javascript">
 2
 3     // 实例化编辑器,这里注意配置项隐藏编辑器并禁用默认的基础功能。
 4  var uploadEditor = UE.getEditor("uploadEditor", {
 5         isShow: false,
 6         focus: false,
 7         enableAutoSave: false,
 8         autoSyncData: false,
 9         autoFloatEnabled:false,
10         wordCount: false,
11         sourceEditor: null,
12         scaleEnabled:true,
13         toolbars: [["attachment"]]
14     });
15
16     // todo::some code
17
18 </script>
19 <script type="text/javascript">
20 uploadEditor.ready(function () {
21     // 监听插入附件
22     uploadEditor.addListener("afterUpfile",_afterUpfile);
23 });
24
25 document.getElementById(‘j_upload_file_btn‘).onclick = function () {
26     var dialog = uploadEditor.getDialog("attachment");
27     dialog.title = ‘附件上传‘;
28     dialog.render();
29     dialog.open();
30 };
31
32 function _afterUpfile(t, result) {
33     var fileHtml = ‘‘;
34     for(var i in result){
35         fileHtml = ‘<li><a href="‘+result[i].url+‘" target="_blank">‘+result[i].url+‘</a></li>‘;
36     }
37     document.getElementById(‘upload_file_wrap‘).innerHTML = fileHtml;
38 }
39 </script>

除了以上操作,还要在ueditor.all.js里面ctrl + f搜索:me.execCommand(‘insertHtml‘, html);

然后在其下面加入一行代码:me.fireEvent(‘afterUpfile‘, filelist);基本上算是完成了。我自己测过了可以使用的:

不会上传动态图片,只能上传操作过程

       

自己可以测试一下。

当然了,Ta这个写的都是多文件上传的,但是我的需要是上传一个固定的txt文件,而自己又不想翻来覆去去寻找源码代码去改,最后决定自己用layui写一个类百度富文本上传附件功能:

百度富文本是点击一个锚点或者按钮弹出上传页面的,这点对应layui来说不要太轻松。

首先页面要先引入layui.js和layui.css,

然后定义一个打开上传附件的按钮,点击此按钮弹出上传的框

1 <form class="layui-form">
2       <div class="layui-inline">
3            <a class="layui-btn layui-btn-primary" id="file_btn">上传校准文件</a>
4       </div>
5 </form>

在js里面写点击按钮打开弹窗事件:

$(‘#file_btn‘).click(function(){
    layer.open({
          type: 2,
          title: ‘上传校准文件‘,
          maxmin: false,
          shadeClose: false, //点击遮罩关闭层
          area : [‘650px‘ , ‘450px‘],
          content: ‘/log/upload‘
        });
});

content里面的地址是经过后台控制层跳转的页面,因为我用的是MVC模式,简单的页面代码

 1 <%@ page language="java" contentType="text/html; charset=utf-8"
 2     pageEncoding="utf-8"%>
 3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 4 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
 5 <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
 6 <%@ page trimDirectiveWhitespaces="true"%>
 7 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 8 <html>
 9 <head>
10 <meta charset="utf-8">
11 <title>文件上传</title>
12 <meta name="renderer" content="webkit">
13 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
14 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
15 <meta name="apple-mobile-web-app-status-bar-style" content="black">
16 <meta name="apple-mobile-web-app-capable" content="yes">
17 <meta name="format-detection" content="telephone=no">
18 <link rel="stylesheet" href="${pageContext.request.contextPath}/layui/css/layui.css" media="all" />
19 <link rel="stylesheet" href="${pageContext.request.contextPath}/css/public.css" media="all" />
20 <script type="text/javascript"  src="${pageContext.request.contextPath}/scripts/jquery-3.2.1.min.js"></script>
21 </head>
22 <body class="childrenBody">
23     <form class="layui-form">
24
25     </form>
26 </body>
27 <script type="text/javascript" src="${pageContext.request.contextPath}/layui/layui.js"></script>

点击上传校准文件按钮弹出页面为:

然后在这个页面上添加一个选择文件的按钮或者图片,我用的就是layui官网上给的样式,看起来还是可以的:

 1 <form class="layui-form">
 2         <div class="user_left">
 3             <div class="file_upload" style="margin-top:10%;text-align:center;">
 4               <div class="layui-upload-drag" id="test1">
 5                       <i class="layui-icon"></i>
 6                       <p>点击上传,或将文件拖拽到此处</p>
 7                 </div>
 8             </div>
 9           </div>
10           <div class="layui-form-item" style="text-align:center;margin-top:15%;">
11               <button type="button" class="layui-btn" id="btn1">确定</button>
12               <button type="button" class="layui-btn layui-btn-primary" id="btn2">取消</button>
13             </div>
14     </form>

页面显示为:

根据百度富文本附件上传操作流程,我这边应该是点击或者拖拽完文件后这部分隐藏掉,然后天换成相应的文件列表页面:

 1 <form class="layui-form">
 2         <div class="user_left">
 3             <div class="ups" style="display:none;">
 4             <div class="layui-upload" style="margin-left:54%;">
 5             <button type="button" class="layui-btn layui-btn-primary layui-btn-sm" id="test3"  style="margin-left:43%;">
 6                     <i class="layui-icon"></i>重新选择
 7                 </button>
 8                 <button type="button" class="layui-btn layui-btn-sm layui-btn-normal" id="test2">
 9                     <i class="layui-icon"></i>开始上传
10                 </button>
11             </div>
12             <div class="layui-form-item">
13                 <div class="layui-upload">
14                     <div class="imgg">
15                         <p class="titll"></p>
16                     </div>
17                 </div>
18              </div>
19              </div>
20             <div class="file_upload" style="margin-top:10%;text-align:center;">
21               <div class="layui-upload-drag" id="test1">
22                       <i class="layui-icon"></i>
23                       <p>点击上传,或将文件拖拽到此处</p>
24                 </div>
25             </div>
26           </div>
27           <div class="layui-form-item" style="text-align:center;margin-top:15%;">
28               <button type="button" class="layui-btn" id="btn1">确定</button>
29               <button type="button" class="layui-btn layui-btn-primary" id="btn2">取消</button>
30             </div>
31     </form>

图片和文件名的样式为:

1 /* 上传文件*/
2 .imgg{width: 110px;height: 130px;background: url(../images/txt.png) no-repeat center;text-align: center;margin: 9px 0 0 9px; position: relative;
3  display: block;float: left;overflow: hidden;font-size: 12px;}
4 .titll{position: absolute;top: 0;left: 0;width: 100%;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;top: 5px;text-align: center;}

其中的图片自己去查找选择。

页面显示为:

但是这样太难看了,再对比一下百度富文本附件上传样式,emm,加个显示文件个数的,然后加个分割线:

 1 <div class="ups" style="display:none;">
 2             <div class="layui-upload" style="margin-left:3%;">
 3             <span>选中<a style="color:red;">1</a>个文件,上传成功<a id="succ" style="color:green;">0</a>个</span><!-- 显示上传文件成功的个数 -->
 4             <button type="button" class="layui-btn layui-btn-primary layui-btn-sm" id="test3"  style="margin-left:43%;">
 5                     <i class="layui-icon"></i>重新选择
 6                 </button>
 7                 <button type="button" class="layui-btn layui-btn-sm layui-btn-normal" id="test2">
 8                     <i class="layui-icon"></i>开始上传
 9                 </button>
10             </div>
11             <hr class="layui-bg-gray"><!-- 分割线 -->
12             <div class="layui-progress" lay-showPercent="yes" lay-filter="demo" style="display:none;margin-top:3%;">
13               <div class="layui-progress-bar layui-bg-green" lay-percent="0%"></div>
14             </div>
15             <div class="layui-form-item">
16                 <div class="layui-upload">
17                     <div class="imgg">
18                         <p class="titll"></p>
19                     </div>
20                 </div>
21              </div>
22              </div>

再看页面:

注意:这部分代码应该是隐藏着的,当用户点击选择文件后才会把点击选择文件隐藏这个页面代码打开,所以在头部我设置了css属性:display:none;

当然,这些操作是用户选择文件不上传,当点击特定的上传按钮时才上传文件的,所以js代码为

 1 layui.use([‘upload‘,‘form‘,‘element‘], function(){
 2       var $ = layui.jquery
 3       ,upload = layui.upload;
 4       var form = layui.form;
 5       var element = layui.element;
 6           upload.render({
 7             elem: ‘#test1‘
 8                ,exts : ‘txt|TXT‘
 9             ,url: ‘/log/upload‘
10             ,accept : ‘file‘
11             ,multiple: false
12             ,auto: false//不自动上传
13             ,bindAction: ‘#test2‘
14             ,choose: function(obj){
15                 $(‘.file_upload‘).hide();
16                 $(‘.ups‘).show();
17                       //读取本地文件
18                  obj.preview(function(index, file, result){
19                      $(‘.titll‘).text(file.name);
20                   });
21               }
22             ,done: function(res){//上传完毕后的回调
23               //console.log(res);
24
25             }
26           });
27 });

具体使用配置请先看layui官网上给的基础参数一览表http://www.layui.com/doc/modules/upload.html#options

choose:就是选择文件后的回调函数,选择完文件之后先不上传,把选择文件这部分隐藏掉:$(‘.file_upload).hide();然后把选择完文件之后的页面显示出来:$(‘.ups‘).show();

然后在obj.preview方法中获取到文件名赋值到titll类中用于显示文件名。

然后在done中写上传完毕之后的事情:简单说就是把上传按钮给禁用了,防止重复上传,然后显示上传成功个数给改变一下

1 $(‘#succ‘).text(1);
2 $(‘#test2‘).addClass(‘layui-btn-disabled‘); 

因为我这这边只是上传一个文件的,所以添加的1.

然后想刷新父页面的刷新就行,根据需要写。

接下来说下重新上传事件:

重新上传就等于刚打开这个弹出层第一次点击一样,所以我是这样写的:

1  //重新选择
2      $(‘#test3‘).click(function(){
3          $(‘#test1‘).trigger("click");
4      });

test1就是刚弹出这个页面点击选择文件的模板选择器。重传等于说是这个按钮重新点击了一次,所以给它加个点击事件,虽然隐藏了,但是并不影响。

然后再之前操作中上传成功之后把开始上传这个按钮给禁用了防止重复上传。如果点击重新上传的话这个开始上传按钮应该也是可以点击的。

本来是想加再点击重新上传事件里面,但是考虑到用户点击重新上传但由于一些原因并没有选择文件,这样的话还是会造成一些不必要的bug。

所以把开始上传按钮的禁用状态改掉应该是写再用户选择完文件之后发生的:

1 obj.preview(function(index, file, result){
2                      $(‘.titll‘).text(file.name);
3                      $(‘#test2‘).removeClass(‘layui-btn-disabled‘);//移除禁用状态
4                   });

页面依次为:上传完毕后页面;点击重新上传按钮页面;点击重新上传按钮选择完文件后页面:

    

至此,大致的基本都算是写完了,接下来增加个功能进度条!

进度条我用的也是layui官网上给的进度条demo,样式还是可以的,近一段时间对于layui很痴迷。接下来说下实现过程:

首先进度条显示是在用户点击开始上传之后才出现的,所以页面上加上一个进度条(element模板):

1 <div class="layui-progress" lay-showPercent="yes" lay-filter="demo" style="margin-top:3%;">
2               <div class="layui-progress-bar layui-bg-green" lay-percent="0%"></div>
3             </div>

在分割线下面,看页面上:

当然,这里给它设置为隐藏,在用户点击开始上传时候再显示出来,让它从0%一直到100%显示上传成功后再次隐藏掉。设置为隐藏再style里面加个属性:display:none;

前面说了,这个进度条显示是在用户点击开始上传时候才有的,直到上传成功结束,所以我把这个事件写在用户点击上传之后的方法before中:

1 ,before: function(obj){ //obj参数包含的信息,跟 choose回调完全一致。
2     $(‘.layui-progress‘).show();//进度条显示
3  }

这个方法写在choose与done中间。这样的话当用户点击开始上传之后进度条就会显示出来了。

接下来是实现进度条的loading!

由于时间原因我直接用的是layui官网上给的demo,自己改改直接拿过来用,就是使用周期性定时器setInterval:

先贴上代码:

 1 ,before: function(obj){ //obj参数包含的信息,跟 choose回调完全一致。
 2                  $(‘.layui-progress‘).show();//进度条显示
 3                  var n = 0,
 4                  timer = setInterval(function(){
 5                      n = n + Math.random()*1000|0;
 6                      if(n>80){
 7                        n = 80;
 8                        clearInterval(timer);
 9                      }
10                      element.progress(‘demo‘, n+‘%‘);
11                    }, 2000);
12                }

n就是定义的百分百,从0开始的。然后用n = n + Math.random()*1000|0;  获取进度百分比。一直到n=80也就是进度条到80%的时候清除定时器,用element.progress(‘demo‘, n+‘%‘)给进度条赋值。

为什么到80%?因为这短时间是上传的时间,在文件上传成功之后才返回100%;

在done里面获取到返回的状态,当返回成功时用element.progress(‘demo‘, 100+‘%‘);使进度条到100%。

页面演示为:开始上传;上传过程;上传成功;上传成功后:

     

上面就是所有的实现过程了,如果想实现多文件上传或者图片上传只需要改改其中的一些代码就可以了。

特此记一下,以后可以直接拿来用。

原文地址:https://www.cnblogs.com/ka-bu-qi-nuo/p/9112928.html

时间: 2024-11-07 15:00:18

类百度富文本编辑器文件上传。的相关文章

CKEditor5 + vue2.0 富文本编辑器 图片上传、highlight等用法

因业务需求,要在 vue2.0 的项目里使用富文本编辑器,经过调研多个编辑器,CKEditor5 支持 vue,遂采用.因 CKEditor5 文档比较少,此处记录下引用和一些基本用法. CKEditor5官网 https://ckeditor.com/docs/ckeditor5/latest/builds/guides/overview.html CKEditor5 引入 有四种编辑器可供下载,根据自己的需求选择,因为开发需求需要颜色笔,所以采用 Document editor. 如果之前有

uedit 富文本编辑器 图片上传 图片服务器

uedit设置 修改uploader 类   源代码这个注释 $url = "upimg.com/uploadImg.php"; $tmpName = $file['name']; //上传上来的文件名 $tmpFile = $file['tmp_name']; //上传上来的临时存储路径 $tmpType = $file['type']; //上传上来的文件类型 $folder = 'goods_uedit'; //存储路径 //执行上传 $data = json_decode($t

百度富文本编辑器ueditor/jsp版的简单使用,可上传图片和附件

~~经过一上午的时间,终于把ueditor编辑器搞出来了,仅做记录 #完成的样子 1,首先在官网下载对应的插件 [附下载地址:http://ueditor.baidu.com/website/download.html]    本人使用的是Java语言 ,框架是ssm+maven 2,解压文件,在自己项目的根目录下新建文件夹 ueditor,把utf8-jsp中文件复制粘贴到ueditor文件夹下 3,新建一个ueditorTest.jsp,把文件夹中index.html中的HTML代码复制粘贴

百度富文本编辑器UEditor1.3上传图片附件等

今天一直在整我的一个项目的编辑器上传图片,我用的是百度UEditor 1.3版本的:现在已经有了1.4的了,不过还算比较新吧,但是官网上面没有上传图片这些的教程,而网上对于这方面的资料很少啊,折腾了我半天,看了一些以前版本的上传图片的问题,最后终于搞定了. 先说说我的这个项目的配置情况吧 用的是SSH框架:struts2.3.16 spring3.2.5 hibernate3.3.2 ueditor 1.3-utf-8-jsp版 jdk 1.7 开发工具用的是myeclipse10.7 直接把项

Django集成百度富文本编辑器uEditor

UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码. 首先从ueEditor官网下载最新版本的包,目前官网上提供了ASP..NET.PHP.JSP版本的,django版本只有一个第三方个人开发的,但看上出配置起来稍微复杂一点. 这里不介绍uEditor的使用方法,也不过多解释uEditor的配置方法,官网上都有详细的文档和API介绍,下载的Demo中也有常用的方法的示例代码,这里主要介绍uEdi

百度富文本编辑器

[下载所需资源]---------------------------------------百度搜索-- 百度富文本编辑器--进入首页(百度编辑器-UEditor-首页) 百度编辑器 - UEditor - 首页-- 上方导航[下载]--选择对应的版本下载(我选的是 1.4.3.3 .Net 版本 utf-8版) [把资源引入自己的项目]--------------------------------------- 这里,模拟需求:新建一个项目  MyTest,要使用  富文本编辑器的功能. 

ueditor百度富文本编辑器使用解决方案

写网站的时候都是用asp.net2.0写的 但是看了百度的富文本编辑器使用说明都是.net framework 4.0 版本的 百度了半天看的各种的解决方案 我把最新版本的百度富文本编辑器下载下来 改了.sln 文件信息 可以用vs2008打开 当然会报一些错误 ..类名不存在等等 百度了半天还是没解决问题后来放弃了.(最终还是用了百度的) 于是就找了kindeditor但是觉得他长得有点丑..还是放弃了 又接着百度ueditor配置方法看到了一篇博文 http://blog.sina.com.

在MVC中应用百度富文本编辑器

1.下载.NET版本的百度富文本编辑器,前往 下载.NET版本百度富文本框 2.解压下载的.zip压缩包,将utf8-.net文件夹名称改为:ueditor,复制到MVC根目录下面.结构如下: App_Code 上的文件是应用程序的源码 Config.cs 负责读取配置文件 Handler.cs 是请求处理器的基类,提供了一些基本对象的访问以及输出控制.如果需要增加处理器,应该从该基类继承 PathFormatter.cs 解析 PathFormat,把信息填充为运行时信息. *Handler.

Jfinal整合百度富文本编辑器ueditor

ueditor配置文件ueditor.config.js修改参数serverUrl:(改为要调用的controller) 后台添加该路由指定的controller package com.sandu.mega.admin.ueditor; import com.jfinal.aop.Clear; import com.jfinal.core.Controller; import com.jfinal.kit.Ret; import com.jfinal.upload.UploadFile; im