精华内容
下载资源
问答
  • 算器不仅有大数据计算,还有诗和远方。最近看到不少写诗机器人的新闻,于是尝试用集算器简单地实现一个。这个实现真的很简单,简单到只有10几行代码,请看实现步骤:   1下载字典和诗词 从网上找一个用于分词...

    可阅读原文:http://c.raqsoft.com.cn/article/1536756719594?r=alice

    集算器不仅有大数据计算,还有诗和远方。最近看到不少写诗机器人的新闻,于是尝试用集算器简单地实现一个。这个实现真的很简单,简单到只有10几行代码,请看实现步骤:

     

    1下载字典和诗词

    从网上找一个用于分词的字典文件,里面记录着每个中文词汇的词性。我从GitHub上找了一个,稍微处理之后保存到集文件dict.btx。

    下载宋词三百首的txt文件,去掉空格和换行,以及其它文字以外的字符,得到一个长字符串。

    2训练

    对上一步得到的长字符串进行分词,结果保存到集文件作为模板,实现代码如下:

     

    A

    B

    C

    1

    =file("dict.btx").import@bi().keys(WORD).index()

       

    2

    =create(WORD,LEN,T)

       

    3

    宋词三百首宴山亭赵佶北行见杏花裁剪冰绡,轻叠数……    

    4

    =len(A3)

    >i=1

     

    5

    for (i<=A4)

    >word3=A2.find(mid(A3,i,3) ), word2=A2.find(   mid(A3,i,2) ), word1=A2.find( mid(A3,i,1) )

     

    6

     

    if (word3!=null)

    >A2.insert(0, word3.(WORD),3,word3.(T)), i=i+3

    7

     

    else if (word2!=null)

    >A2.insert(0, word2.(WORD),2,word2.(T)), i=i+2

    8

     

    else if (word1!=null)

    >A2.insert(0, word1.(WORD),1,word1.(T)), i=i+1

    9

     

    else

    >i=i+1

    10

    =file("宋词模型.txt").export@t(A2)    

    A1读取字典文件,并且建立索引;

    A2定义模板记录的数据结构,三个字段表示:词、长度、词性;

    A5到A9是循环处理,对A3进行分词,这里最长只处理三个字组成的词;

    A10把结果保存;

    这一步得到一个模板,内容是《宋词三百首》里所有文字的分词,以及这些分词的词性。

    3创作

    创作的原理是找一首宋词作为目标,得到它的每个分词,根据分词的长度和词性,从上一步的模板里随机找一个词进行替换。这里选择的是《水调歌头·明月几时有》,来看代码:

     

    A

    B

    C

    1

    =file("宋词模型.txt").import@t()    

    2

    =file("dict.btx").import@bi().keys(WORD).index()

       

    3

    明月几时有,把酒问青天。不知天上宫阙,今夕是何年。我欲乘风归去。惟恐琼楼玉宇,高处不胜寒,起舞弄清影,何似在人间。    

    4

    =len(A3)

    >str="", i=1, words=null

     

    5

    for (i<=A4)

    >word3=A2.find(mid(A3,i,3)   ),word2=A2.find( mid(A3,i,2) ), word1=A2.find( mid(A3,i,1) )

     

    6

     

    if (word3!=null)

    >words=A1.select(LEN==3&&   T==word3.(T) ), i=i+3, str=str+words(1+rand(words.len())).(WORD)

    7

     

    else if (word2!=null)

    >words=A1.select(LEN==2&&   T==word2.(T) ), i=i+2, str=str+words(1+rand(words.len())).(WORD)

    8

     

    else if (word1!=null)

    >words=A1.select(LEN==1&&   T==word1.(T) ), i=i+1, str=str+words(1+rand(words.len())).(WORD)

    9

     

    else

    >str=str+mid(A3,i,1), i=i+1

    10

    >output(str)

       

    运行结果如下,这些“作品”虽然存在语法错误,但还是有模有样的,总比我自己写的要好很多。

    晚秋无奈送,伫立鹧鸪天。已成西下黄叶,春寒疏何处。我又花下离别。酒醒阳关萧萧,如许悲欢霜,初见年少影,谁曾在斜阳。

    春寒何在喧,不解烟雨任。梳洗江上西风,明月怜此地。谁先水声惹起。相思洛阳晓色,几许不成魂,不应相迎竞,他未为梢头。

    而今几度寄,相认问青天。催发江上蓬壶,黄昏发何处。别未御街可惜。轻吹江南那堪,先断闲来闲,相逢拘束影,任又在旧事。

    昨夜无处应,不知阑珊处。映带楼上王孙,如今来有时。任更点点飘香。垂涎池塘秋千,到处望断天,酒醒衰草影,我尤把天涯。

    感兴趣的可以阅读原文,下载附件:http://c.raqsoft.com.cn/article/1536756719594?r=alice

    作者:liwei
    来源:乾学院
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    展开全文
  • 算器不仅有大数据计算,还有诗和远方。最近看到不少写诗机器人的新闻,于是尝试用集算器简单地实现一个。这个实现真的很简单,简单到只有10几行代码,请看实现步骤: 1下载字典和诗词 从网上找一个用于分词的字典...
        

    集算器不仅有大数据计算,还有诗和远方。最近看到不少写诗机器人的新闻,于是尝试用集算器简单地实现一个。这个实现真的很简单,简单到只有10几行代码,请看实现步骤:

    1下载字典和诗词

    从网上找一个用于分词的字典文件,里面记录着每个中文词汇的词性。我从GitHub上找了一个,稍微处理之后保存到集文件dict.btx。

    下载宋词三百首的txt文件,去掉空格和换行,以及其它文字以外的字符,得到一个长字符串。

    2训练

    对上一步得到的长字符串进行分词,结果保存到集文件作为模板,实现代码如下:

    clipboard.png
    A1读取字典文件,并且建立索引;

    A2定义模板记录的数据结构,三个字段表示:词、长度、词性;

    A5到A9是循环处理,对A3进行分词,这里最长只处理三个字组成的词;

    A10把结果保存;

    这一步得到一个模板,内容是《宋词三百首》里所有文字的分词,以及这些分词的词性。

    3创作

    创作的原理是找一首宋词作为目标,得到它的每个分词,根据分词的长度和词性,从上一步的模板里随机找一个词进行替换。这里选择的是《水调歌头·明月几时有》,来看代码:

    clipboard.png
    运行结果如下,这些“作品”虽然存在语法错误,但还是有模有样的,总比我自己写的要好很多。

    晚秋无奈送,伫立鹧鸪天。已成西下黄叶,春寒疏何处。我又花下离别。酒醒阳关萧萧,如许悲欢霜,初见年少影,谁曾在斜阳。

    春寒何在喧,不解烟雨任。梳洗江上西风,明月怜此地。谁先水声惹起。相思洛阳晓色,几许不成魂,不应相迎竞,他未为梢头。

    而今几度寄,相认问青天。催发江上蓬壶,黄昏发何处。别未御街可惜。轻吹江南那堪,先断闲来闲,相逢拘束影,任又在旧事。

    昨夜无处应,不知阑珊处。映带楼上王孙,如今来有时。任更点点飘香。垂涎池塘秋千,到处望断天,酒醒衰草影,我尤把天涯。

    选择一首发到朋友圈,居然得到不少点赞。

    实现原理是同词性替换,根据这个还可以实现写唐诗的功能。如果对模板文件进一步调整,根据韵律和平仄优化词性,效果会更好。这就是属于人工智能的人工劳动了,需要专业知识和辛苦付出,不是一下可以达成的。

    感兴趣的同学可以下载附件

    展开全文
  • 下载内存注册机。 2 把内存补丁复制到软件所在(硬盘的)目录内;运行内存补丁,接着输入任意注册码点注册或确定。此时将弹出正确的注册码。 3 把你得到的正确注册码填入原软件需要注册的地方,点击确定或注册即可。...
  • 趁着记忆力还充足赶紧记录一下。 一、ueditor引入SpringBoot 首先请准备进入这个浑水的请务必注意,百度富文本编辑已经4年没有更新过了。如果不是项目必须要用,你完全可以选择市面上仍在维护的编辑。 那么...

    前言:之前做了很多富文本编辑器的工作,不过都是以前了,最近项目突然要加富文本编辑器。心想那就加嘛,没想到springboot整合ueditor这么多坑,一个一个淌过来足足用了整整一天时间。趁着记忆力还算充足赶紧记录一下。

    一、ueditor引入SpringBoot
    首先请准备进入这个浑水的请务必注意,百度富文本编辑器已经4年没有更新过了。如果不是项目必须要用,你完全可以选择市面上仍在维护的编辑器。
    那么开始正常的引入流程:
    (1)官网下载适合的版本,这里我选择的是JSP版本在这里插入图片描述
    下载后解压缩,是一个如此结构的目录
    在这里插入图片描述

    我们将这部分代码直接复制到项目中的静态文件目录下,我这里的目录是这样的
    在这里插入图片描述

    导入maven依赖及相关的文件引入
    ueditor的jar包存放在jsp/lib目录下,自己maven进去即可
    在这里插入图片描述
    相关的maven依赖:(这里ueditor和json包我没在中央仓库下载,而是手动cmd mvn引入的,所以实际依赖可能会和我的不一样,请自行选择,效果是一样的)

            <!-- 引入富文本编辑器依赖 -->
            <dependency>
                <groupId>commons-codec</groupId>
                <artifactId>commons-codec</artifactId>
                <version>1.10</version>
            </dependency>
            <dependency>
                <groupId>commons-fileupload</groupId>
                <artifactId>commons-fileupload</artifactId>
                <version>1.3.3</version>
            </dependency>
            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>2.4</version>
            </dependency>
             <dependency>
                <groupId>com.baidu</groupId>
                <artifactId>ueditor</artifactId>
                <version>1.1.2</version>
            </dependency>
            <dependency>
                <groupId>org.json</groupId>
                <artifactId>json</artifactId>
                <version>1.0</version>
            </dependency>
    

    在相关页面用themleaf引入对应的JS

        <script th:src="@{/ueditor/ueditor.config.js}"></script>
        <script th:src="@{/ueditor/ueditor.all.min.js}"></script>
        <script th:src="@{/ueditor/lang/zh-cn/zh-cn.js}"></script>
    

    这里请务必注意引入顺序,config.js必须在all.min.js上面,让ueditor先加载相关配置项,不然会JS报错,富文本编辑器初始化失败。
    (3)在页面初始化富文本编辑器
    html:
    在这里插入图片描述
    JS:

    //初始化富文本编辑器
    var ue = UE.getEditor("editor");
    

    至此,项目引入富文本编辑器第一步就完成了。
    打开对应的页面,出现如图
    在这里插入图片描述
    二、ueditor的图片、附件、视频等相关的配置与结合fastDFS
    完成了上面步骤后,富文本编辑器自己已经可以运转了,但附件上传功能还是坏的。
    会提示后端配置不正确,上传插件不能使用。
    这里ueditor会读取ueditor.config.js中的配置
    在这里插入图片描述
    而JSP中只是个跳转,最终找到的是config.json,这里面是全部富文本编辑器上传所需要的配置项
    在这里插入图片描述
    但是这里有两个问题,
    一个是config.json在这个目录下是读取不到的,为此我们需要把它移动到statics目录下,
    第二个是config.json读取加载完毕后会走ueditor内置的BinaryUploader文件上传。
    这里由于springboot默认配置原因,springboot与BinaryUploader内置的方法冲突,所以用它自带的上传方法是拿不到文件流的,会不停的报未找到上传数据的错误。

    三、ueditor重写,并整合进fastDFS

    于是为了拿到上传数据,以及整合fastDFS,我们需要重写这部分代码。
    首先干掉controller.jsp和config.json,这里我们完全不需要ueditor内置的上传方法了,
    新建一个ueditor的controller

    
    
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import org.springframework.web.bind.annotation.RestController;
    
    
    
    
    /**
     * @author deer_boom
     * @version 1.0
     * @date 2020年7月27日
     */
    @RequestMapping("ueditor")
    @RestController
    public class UEditorController {
    
        @RequestMapping("/Config")
        public String uploadConfig() {
            String s = "/* 前后端通信相关的配置,注释只允许使用多行方式 */\n" +
                    "{\n" +
                    "    /* 上传图片配置项 */\n" +
                    "    \"imageActionName\": \"uploadimage\", /* 执行上传图片的action名称 */\n" +
                    "    \"imageFieldName\": \"upfile\", /* 提交的图片表单名称 */\n" +
                    "    \"imageMaxSize\": 2048000, /* 上传大小限制,单位B */\n" +
                    "    \"imageAllowFiles\": [\".png\", \".jpg\", \".jpeg\", \".gif\", \".bmp\"], /* 上传图片格式显示 */\n" +
                    "    \"imageCompressEnable\": true, /* 是否压缩图片,默认是true */\n" +
                    "    \"imageCompressBorder\": 1600, /* 图片压缩最长边限制 */\n" +
                    "    \"imageInsertAlign\": \"none\", /* 插入的图片浮动方式 */\n" +
                    "    \"imageUrlPrefix\": \"\", /* 图片访问路径前缀 */\n" +
                    "    \"imagePathFormat\": \"/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}\", /* 上传保存路径,可以自定义保存路径和文件名格式 */\n" +
                    "                                /* {filename} 会替换成原文件名,配置这项需要注意中文乱码问题 */\n" +
                    "                                /* {rand:6} 会替换成随机数,后面的数字是随机数的位数 */\n" +
                    "                                /* {time} 会替换成时间戳 */\n" +
                    "                                /* {yyyy} 会替换成四位年份 */\n" +
                    "                                /* {yy} 会替换成两位年份 */\n" +
                    "                                /* {mm} 会替换成两位月份 */\n" +
                    "                                /* {dd} 会替换成两位日期 */\n" +
                    "                                /* {hh} 会替换成两位小时 */\n" +
                    "                                /* {ii} 会替换成两位分钟 */\n" +
                    "                                /* {ss} 会替换成两位秒 */\n" +
                    "                                /* 非法字符 \\ : * ? \" < > | */\n" +
                    "                                /* 具请体看线上文档: fex.baidu.com/ueditor/#use-format_upload_filename */\n" +
                    "\n" +
                    "    /* 涂鸦图片上传配置项 */\n" +
                    "    \"scrawlActionName\": \"uploadscrawl\", /* 执行上传涂鸦的action名称 */\n" +
                    "    \"scrawlFieldName\": \"upfile\", /* 提交的图片表单名称 */\n" +
                    "    \"scrawlPathFormat\": \"/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}\", /* 上传保存路径,可以自定义保存路径和文件名格式 */\n" +
                    "    \"scrawlMaxSize\": 2048000, /* 上传大小限制,单位B */\n" +
                    "    \"scrawlUrlPrefix\": \"\", /* 图片访问路径前缀 */\n" +
                    "    \"scrawlInsertAlign\": \"none\",\n" +
                    "\n" +
                    "    /* 截图工具上传 */\n" +
                    "    \"snapscreenActionName\": \"uploadimage\", /* 执行上传截图的action名称 */\n" +
                    "    \"snapscreenPathFormat\": \"/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}\", /* 上传保存路径,可以自定义保存路径和文件名格式 */\n" +
                    "    \"snapscreenUrlPrefix\": \"\", /* 图片访问路径前缀 */\n" +
                    "    \"snapscreenInsertAlign\": \"none\", /* 插入的图片浮动方式 */\n" +
                    "\n" +
                    "    /* 抓取远程图片配置 */\n" +
                    "    \"catcherLocalDomain\": [\"127.0.0.1\", \"localhost\", \"img.baidu.com\"],\n" +
                    "    \"catcherActionName\": \"catchimage\", /* 执行抓取远程图片的action名称 */\n" +
                    "    \"catcherFieldName\": \"source\", /* 提交的图片列表表单名称 */\n" +
                    "    \"catcherPathFormat\": \"/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}\", /* 上传保存路径,可以自定义保存路径和文件名格式 */\n" +
                    "    \"catcherUrlPrefix\": \"\", /* 图片访问路径前缀 */\n" +
                    "    \"catcherMaxSize\": 2048000, /* 上传大小限制,单位B */\n" +
                    "    \"catcherAllowFiles\": [\".png\", \".jpg\", \".jpeg\", \".gif\", \".bmp\"], /* 抓取图片格式显示 */\n" +
                    "\n" +
                    "    /* 上传视频配置 */\n" +
                    "    \"videoActionName\": \"uploadvideo\", /* 执行上传视频的action名称 */\n" +
                    "    \"videoFieldName\": \"upfile\", /* 提交的视频表单名称 */\n" +
                    "    \"videoPathFormat\": \"/ueditor/jsp/upload/video/{yyyy}{mm}{dd}/{time}{rand:6}\", /* 上传保存路径,可以自定义保存路径和文件名格式 */\n" +
                    "    \"videoUrlPrefix\": \"\", /* 视频访问路径前缀 */\n" +
                    "    \"videoMaxSize\": 102400000, /* 上传大小限制,单位B,默认100MB */\n" +
                    "    \"videoAllowFiles\": [\n" +
                    "        \".flv\", \".swf\", \".mkv\", \".avi\", \".rm\", \".rmvb\", \".mpeg\", \".mpg\",\n" +
                    "        \".ogg\", \".ogv\", \".mov\", \".wmv\", \".mp4\", \".webm\", \".mp3\", \".wav\", \".mid\"], /* 上传视频格式显示 */\n" +
                    "\n" +
                    "    /* 上传文件配置 */\n" +
                    "    \"fileActionName\": \"uploadfile\", /* controller里,执行上传视频的action名称 */\n" +
                    "    \"fileFieldName\": \"upfile\", /* 提交的文件表单名称 */\n" +
                    "    \"filePathFormat\": \"/ueditor/jsp/upload/file/{yyyy}{mm}{dd}/{time}{rand:6}\", /* 上传保存路径,可以自定义保存路径和文件名格式 */\n" +
                    "    \"fileUrlPrefix\": \"\", /* 文件访问路径前缀 */\n" +
                    "    \"fileMaxSize\": 51200000, /* 上传大小限制,单位B,默认50MB */\n" +
                    "    \"fileAllowFiles\": [\n" +
                    "        \".png\", \".jpg\", \".jpeg\", \".gif\", \".bmp\",\n" +
                    "        \".flv\", \".swf\", \".mkv\", \".avi\", \".rm\", \".rmvb\", \".mpeg\", \".mpg\",\n" +
                    "        \".ogg\", \".ogv\", \".mov\", \".wmv\", \".mp4\", \".webm\", \".mp3\", \".wav\", \".mid\",\n" +
                    "        \".rar\", \".zip\", \".tar\", \".gz\", \".7z\", \".bz2\", \".cab\", \".iso\",\n" +
                    "        \".doc\", \".docx\", \".xls\", \".xlsx\", \".ppt\", \".pptx\", \".pdf\", \".txt\", \".md\", \".xml\"\n" +
                    "    ], /* 上传文件格式显示 */\n" +
                    "\n" +
                    "    /* 列出指定目录下的图片 */\n" +
                    "    \"imageManagerActionName\": \"listimage\", /* 执行图片管理的action名称 */\n" +
                    "    \"imageManagerListPath\": \"/ueditor/jsp/upload/image/\", /* 指定要列出图片的目录 */\n" +
                    "    \"imageManagerListSize\": 20, /* 每次列出文件数量 */\n" +
                    "    \"imageManagerUrlPrefix\": \"\", /* 图片访问路径前缀 */\n" +
                    "    \"imageManagerInsertAlign\": \"none\", /* 插入的图片浮动方式 */\n" +
                    "    \"imageManagerAllowFiles\": [\".png\", \".jpg\", \".jpeg\", \".gif\", \".bmp\"], /* 列出的文件类型 */\n" +
                    "\n" +
                    "    /* 列出指定目录下的文件 */\n" +
                    "    \"fileManagerActionName\": \"listfile\", /* 执行文件管理的action名称 */\n" +
                    "    \"fileManagerListPath\": \"/ueditor/jsp/upload/file/\", /* 指定要列出文件的目录 */\n" +
                    "    \"fileManagerUrlPrefix\": \"\", /* 文件访问路径前缀 */\n" +
                    "    \"fileManagerListSize\": 20, /* 每次列出文件数量 */\n" +
                    "    \"fileManagerAllowFiles\": [\n" +
                    "        \".png\", \".jpg\", \".jpeg\", \".gif\", \".bmp\",\n" +
                    "        \".flv\", \".swf\", \".mkv\", \".avi\", \".rm\", \".rmvb\", \".mpeg\", \".mpg\",\n" +
                    "        \".ogg\", \".ogv\", \".mov\", \".wmv\", \".mp4\", \".webm\", \".mp3\", \".wav\", \".mid\",\n" +
                    "        \".rar\", \".zip\", \".tar\", \".gz\", \".7z\", \".bz2\", \".cab\", \".iso\",\n" +
                    "        \".doc\", \".docx\", \".xls\", \".xlsx\", \".ppt\", \".pptx\", \".pdf\", \".txt\", \".md\", \".xml\"\n" +
                    "    ] /* 列出的文件类型 */\n" +
                    "\n" +
                    "}";
            return s;
        }
    
    }
    

    这里我们在controller中,直接把ueditor需要的配置项拼接字符串直接返回。
    这样可以瞒过ueditor,上传方法就可以用了。
    然后在页面上传的JS中,重写文件上传的路径
    这个在网络上到处都是,可以直接复制

        UE.Editor.prototype.getActionUrl = function(action) {
            if (action == 'uploadimage' || action == 'uploadfile') {
                return parent.parent.webPath + 'notice/upload';
            } else {
                return this._bkGetActionUrl.call(this, action);
            }
        }
    

    注意此处,uploadimage代表的是图片上传,uploadfile代表的是文件上传,如果你的业务需要视频,也可以在条件里自己加上。
    此时来到上传方法

        /**
         * 富文本附件上传的方法(包括图片、附件)
         * @date 2020年7月27日
         * @author deer_boom
         * @param file
         * @return java.util.Map
         */
        @ResponseBody
        @RequestMapping("/upload")
        public Map upload(@RequestParam(value = "upfile") MultipartFile file) {
            RetBean retBean = new RetBean();
            try {
                String fileFullName = file.getOriginalFilename();
                String extName = fileFullName.split("\\.")[1];
                byte[] bytes = null;
                bytes = file.getBytes();
                String filePath = FastDFSClientUtils.upload(bytes, extName);
                String id = StringUtils.getUUID();
                String time = StringUtils.getDateTime();
                long fileSize = file.getSize();
                FileInfo fileInfo = new FileInfo();
                fileInfo.setFileName(fileFullName);
                fileInfo.setFilePath(filePath);
                fileInfo.setId(id);
                fileInfo.setFileTime(time);
                fileInfo.setFileSuffix(extName);
                int code = archiveNoticeService.savaFile(fileInfo);
                if (code > 0) {
                    retBean.setFileInfo(fileInfo);
                    retBean.setMessage("SUCCESS");
                    retBean.setCode("0");
                    //给ueditor的回调参数
                    Map<String ,Object> result = Maps.newHashMap();
                    result.put("state","SUCCESS");
                    result.put("original",extName);
                    result.put("size",fileSize);
                    result.put("title",fileFullName);
                    result.put("type",bytes);
                    result.put("url", "downLoad?id=" + id);
                    return result;
                } else {
                    retBean.setMessage("ERROR");
                    retBean.setCode("1");
                }
            } catch (IOException e) {
                retBean.setMessage("UPLOAD FILE ERROR");
                retBean.setCode("1");
            }
            return null;
        }
    
    

    这里需要注意的是需要手动用map给ueditor返回它需要的格式

    				//给ueditor的回调参数
                    Map<String ,Object> result = Maps.newHashMap();
                    result.put("state","SUCCESS");
                    result.put("original",extName);
                    result.put("size",fileSize);
                    result.put("title",fileFullName);
                    result.put("type",bytes);
                    result.put("url", "downLoad?id=" + id);
    

    URL为fastDFS获取图片的方法
    这里需要注意的问题有:
    1、Springboot获取不到文件流,MultipartFile一直是null
    这个原因有俩,一个是springboot自带的org.springframework.web.multipart.MultipartFile和Multipart冲突。
    为此需要自己添加配置到启动项

    @Configuration
    public class UploadConfig {
        @Bean(name = "multipartResolver")
        public MultipartResolver multipartResolver() {
            CommonsMultipartResolver resolver = new CommonsMultipartResolver();
            resolver.setDefaultEncoding("UTF-8");
            //resolveLazily属性启用是为了推迟文件解析,以在在UploadAction中捕获文件大小异常
            resolver.setResolveLazily(true);
            resolver.setMaxInMemorySize(40960);
            //上传文件大小 5M 5*1024*1024
            resolver.setMaxUploadSize(5 * 1024 * 1024);
            return resolver;
        }
    }
    

    2、请重新回头查看刚才拼接的ueditorController,里面写了上传表单名
    在这里插入图片描述
    这里请务必与后台接收名对应好,在这里插入图片描述
    在这里插入图片描述

    至此,附件上传成功,但是回显还是有问题
    在这里插入图片描述
    来简单看一下现在图片的src:
    在这里插入图片描述

    为此需要我们在手动拼的url对应中,写从fastDFS中获取图片的方法

        @ResponseBody
        @RequestMapping("/downLoad")
        public void downLoad(@RequestParam(value = "id") String id, HttpServletResponse response) throws IOException {
            PrintWriter writer = response.getWriter();
            FileInfo fileInfo = archiveNoticeService.fileInfoById(id);
            String fileName = fileInfo.getFileName();
            String filePath = fileInfo.getFilePath();
            try {
                String group = filePath.split("/")[0];
                InputStream inStream = FastDFSClientUtils.download(group, fileInfo.getFilePath());
                // 设置输出的格式
                response.reset();
    
                response.setContentType("application/octet-stream");//设置文件类型
    
                response.addHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(fileName, "UTF-8") + "\"");
                // 循环取出流中的数据
                byte[] b = IOUtils.toByteArray(inStream);
                response.getOutputStream().write(b);
                response.flushBuffer();
                inStream.close();
                response.getOutputStream().close();
            } catch (Exception e) {
                writer.println("Download failure!");
                e.printStackTrace();
            }
        }
    

    重新尝试:回显成功!在这里插入图片描述

    但是此时保存后还是有问题的,因为ueditor和springboot相关配置的XSS注入拦截,会在新增时传参的时候,把img标签里的src过滤掉,导致回显src缺失没图没文件,为此我们需要做两手解决:
    1、ueditor的解决:在ueditor中直接将XSS拦截关闭,统一改成false
    在这里插入图片描述
    担心这样会出现注入问题的话,可以在ueditor.all.js和ueditor.all.min.js中干掉img的判断

    在这里插入图片描述

    					case 'img':
                            //todo base64暂时去掉,后边做远程图片上传后,干掉这个
                            /*if (val = node.getAttr('src')) {
                                if (/^data:/.test(val)) {
                                    node.parentNode.removeChild(node);
                                    break;
                                }
                            }
                            node.setAttr('_src', node.getAttr('src'));*/
                            break;
    

    第二步,如果你的Springboot项目也配置了XSS拦截,那么需要将对应的字符串转义即可,这个根据你自己实际业务随时引入,我把有用的JS都放上了,noticeContent就是你后台传过来的富文本内容

    noticeContent = html2Escape(noticeContent);
    //特殊字符转义
    function html2Escape(sHtml) {
        return sHtml.replace(/[<>&"]/g,function(c){
            return {'<':'&lt;','>':'&gt;','&':'&amp;','"':'&quot;'}[c];
        });
    }
    

    由于涉及到了转义,所以请记得回显的时候反转义回来,

    	noticeContent = escape2Html(noticeContent);
    	console.log("转义前::"+noticeContent);
    	ue.setContent(noticeContent);
    
    //特殊字符反转义
    function escape2Html(str) {
        var arrEntities={'lt':'<','gt':'>','nbsp':' ','amp':'&','quot':'"'};
        return str.replace(/&(lt|gt|nbsp|amp|quot);/ig,function(all,t){
            return arrEntities[t];
        });
    }
    

    这样,富文本内回显也没有问题了。

    此时新增、修改的上传与回显都是正常的。但是作为一个富文本管理功能,必然有一个专门的展示页,所以回显富文本也是有问题的,不过很简单,稍做记录:
    themleaf使用th:text回显会导致页面不渲染,所以这里请使用th:utext回显,就可以正常加载了

    <div id="noticeContent" th:utext="${noticeMap.NOTICE_CONTENT}"></div>
    

    至此,SpringBoot+Ueditor+themleaf+fastDFS都全都弄好了,功能正常可以使用。

    结尾:我自己水平不高,因为这个东西着实头疼了我一天,而且网上很多方法又碎又不好用,一个问题可能需要三篇博客结合看才能解决问题,所以分享出来权当帮大家伙踩坑,有什么问题可以留言。

    展开全文
  • 因为之前我的小米笔记本装的第二个Ubuntu系统的无线wifi驱动老是打不开(试过网上的N+种方法,我放弃了。。。),只能用USB数据分享或者蓝牙数据分享,非常难受。了先不用那个了吧,弄个虚拟机试试。 VirtualBox...

    个人博客:https://blog.fmujie.cn/

    前言

    因为之前我的小米笔记本装的第二个Ubuntu系统的无线wifi驱动器老是打不开(试过网上的N+种方法,我放弃了。。。),只能用USB数据分享或者蓝牙数据分享,非常难受。算了先不用那个了吧,弄个虚拟机试试。

    VirtualBox下载安装

    下载官网

    一路next就行,不用额外添加别的,安装成功后界面如图,可能因为版本不同而略微有差别(不包含myUb)

    vb界面.png

    基于VirtualBox安装Ubuntu

    这里放上网上的一个很好的**教程,镜像你可以自行选择推荐最新版本,到Ubuntu官网**下载镜像,我分配的磁盘空间为64G

    安装完之后

    你会发现你的Ubuntu界面是如此精巧~问题解决方案

    开启虚拟机进去之后你键盘左边的Ctrl键与右边的Ctrl键是有区别的,virtualbox虚拟机窗口模式显示设置,切换可用右边的Ctrl+字母键盘C (一定要是右边的Ctrl+C)

    关于本地与虚拟机之间剪贴板共用问题与文件拖拽问题,这两个功能若是可行的话会给我们带来不少的便利,红色方框内都可双向

    拖拽.png

    Ubuntu安装PyCharm + Anaconda + Chrome + Git +科学上网

    PyCharm在系统自带的"软件商店"上能搜到

    Anaconda在官网下载

    Chrome官网下载

    Git使用命令行安装

    # apt-get install git
    

    Git基本配置

    PyCharm内的代码注释是用的左边的Ctrl键+/ 因为右边的Ctrl在虚拟机环境下是热键,着实有些不习惯

    Chrome插件安装,以前的谷歌打包好扩展程序后是一个压缩包,之后改成crx了,看这,因为之前设置了文件可拖拽,将crx拖拽到虚拟机就行,然后把后缀改成.zip的格式,打开谷歌浏览器,往里面一拖就行。之前不知道,老是报错。。。(自行科学上网)
    哎~要完美的做一件事途中会遇到很多坑,一个教程根本不够填坑的,现在也就是增加点经验吧。

    展开全文
  • 中软国际实训第一天-配置环境1、 安装JDK2、 安装IDEA3、 安装Tomcat配置环境变量配置Tomcat4、 安装maven配置环境变量配置阿里云镜像源5、 安装MySQL6、 安装编辑 1、 安装JDK 下载 资料 文件夹后之后将其解压,...
  • 这是我从官方网站下载的一个小键盘记录软件,还不错,虽然是老版本,虽小但五脏具全,带记录,带E-MAIL发送,,还比较好用的一个,这个是我暴力破解过的,没有限制了。 大家下载好记得改里面的配置文件,注意。
  • STM32 LL库踩坑系列二(TIM编码) 这个作者很懒,想到什么就写什么! ...注意编码模式需要对应好硬件,这上一个小坑。 /* TIM4 init function */ void MX_TIM4_Init(void) { LL_TIM_InitTyp
  • 当按下HOME键时,如程序不做任何操作,应用会有5秒的执行缓冲时间,随机程序被挂起,所有任务终端,包括计时和位置更新等操作,但程序打开后台模式开关后,部分任务可以再后台执行,如音频,定位,蓝牙,下载,...
  • 经过长达将近三个星期的材料准备,终于在前几天完成了430的USB型仿真的制作,原理完全参照TI官方文档,只是将其中个别分立的125换成了4个一体的,资料都是来自于各个论坛,具体在哪里下载的也不太清楚了,对这些...
  • KeePass 支持中文,请根据下面链接中下载中文语言包,解压然后将 .LNGX文件拷贝到 KeePass 安装目录,然后启动 KeePass,在“View”菜单中选择“Change Language”项,再选择Chinese_Simplified(中文简体)。...
  • 1350多个精品易语言模块提供下载

    热门讨论 2011-06-06 17:51:09
    外挂海-超线程下载模块.ec 外 挂海USB按键测试版.ec 外挂海万能模块.ec 外挂海万能模块1.50.ec 外挂海万能模块1.52.ec 外挂海万能 模块1.56.ec 外挂海万能模块1.57B.ec 外挂海万能模块1.58.ec 外挂海万能模块1.59.ec...
  • 089《本地YouTube下载器》实现被Google禁止的功能 088《知乎网页助手》让网页版知乎更好用 087《豆瓣资源下载大师》1秒搞定豆瓣电影|音乐|图书下载 086《CSDN开发助手》CSDN官方合法免广告工具,内含大量实用...
  • 软件注册模块.ec 色彩转换_模块.ec 杀进程模块.ec 删除文件模块.ec 设置IE代理服务器1.0.ec 设置表格模块.ec 设置控件锚点.ec 设置鼠标活动范围.ec 生成Sqlite表结构.ec 十进制转化为十六进制5.ec ...
  • 新四级分数换算、四六级 考生切不可误信“四六级保过” CET复习不要忽略的捷径——利用好历年真题 如何在四六级的复习中保持韧性 关于四六级考试的形势—“机考”?的问题!! [名师讲解2009年12月大学英语四六...
  • 学了几天的VC++.Net终于有了这一个习作,我很喜欢用PDA看小说,有时候下载下来的网页就需要批量改名,一直用国华的这个,感觉还好用,这两天学了VC++就寻思着仿写一个。昨晚搞定。Version 1.5源代码EXE Release在...
  • 、Python字符串相似性法库、PyLaia:面向手写文档分析的深度学习工具包、TextFooler:针对文本分类/推理的对抗文本生成模块、Haystack:灵活、强大的可扩展问答(QA)框架、中文关键短语抽取工具。 1. textfilter: ...
  • 多fragment单activity拦截不管用,难道只能用于拦截activity的跳转?那如果是要实现登录拦截的话,那不是只能在PathReplaceService中进行了? 网络解决办法 第一个疑问:由于我使用阿里路由,所以我看到zhi1ong...
  • Spring入门

    2017-09-12 19:54:11
    如此说来,我已经入门啦?IoC,依赖注入,实质是面向接口编程,在asp.net mvc里使用Autofac,早已习惯;AOP,实际就是拦截,不用修改什么代码,不知不觉就起作用,也好理解。不管咋样,先记录一下心得:1、下载...
  • 别这样,这里教你一种快速删说说的方法,无需下载任何软件(但还是推荐使用360、QQ或谷歌浏览比较好),只需要在电脑上打开QQ空间。按下键盘上的F12键(注意是功能键哦!!!),浏览器会自动打开一个界面后转到...
  • 假设一个人日常需要电器设备使用时间,以下电器功率参考网上均值,以市场价0.98元 笔记本120w 平均使用时长9小时;手机10w,日常充电7小时 0.12kw*9=1.08kw*h;0.01kw*7=0.07kw*h 风扇60w ,下班及夜间睡觉...
  • 如果需要重新计算加密值,点击 重签名 按钮(默认使用 md5 加密,如需修改加密算法,请参考 8.6 说明进行修改) 点击测试 按钮进行测试。 测试结果会在页面中展示。 如下图示: 8.5 签名算法修改 在 app/api_...
  • Thrust :类似于C++标准模板库的并行法库。 transwarp:任务并发性的C++库,只有头文件。 VexCL :用于OpenCL/CUDA 的C++向量表达式模板库。 Quantum:建立在boost::coroutines2顶层的强大的C++协同调度程序...
  • 一般情况下, RPC 框架不仅要提供服务发现功能,还要提供负载均衡、容错等功能,这样的 RPC 框架才真正合格的。 简单说一下设计一个最基本的 RPC 框架的思路: 注册中心 :注册中心首先是要有的,推荐使用 ...
  • 某生产日报表如下: 现根据日报统计,目标结果如下: ...使用集算器实现步骤: 1. 安装运行集算器 可去润乾官网下载职场版,同时下载一个免费授权就够了,首次运行时会提示加载。 2. 编...
  • 4.3.4 在自己的代码中,如果创建一个java.lang.String类,这个类是否可以被类加载加载?为什么。 4.3.5 说一说你对java.lang.Object对象中hashCode和equals方法的理解。在什么场景下需要重新实现这两个方法。 ...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 147
精华内容 58
关键字:

下载记算器