-文章搜索)博客论坛项目高仿csdn(一篇文章精通系列)(代码片段)

蓝盒子itbluebox 蓝盒子itbluebox     2022-10-21     200

关键词:

Java 之 Spring Boot + Vue + Element UI 前后端分离项目(上-项目搭建)
Java之Spring Boot+Vue+Element UI前后端分离项目(中-功能完善-实现查询)
Java之Spring Boot+Vue+Element UI前后端分离项目(下-功能完善-发布文章-文章搜索)

源代码下载:https://download.csdn.net/download/qq_44757034/85045367
Java SpringBoot 前后端分离项目高仿CSDN项目源代码(前端Vue+Element UI 后端Java的SpringBoot+Myabtis,数据库Mysql)

一、实现文章发布需要使用富文本编辑框

安装富文本编辑框

1、npm安装

npm install vue-quill-editor     //富文本编辑器

npm install quill           //依赖项

2、创建Write.vue

<template>

  <div style="width: 90%; background-color: #99a9bf;margin: auto;top: 0px;left: 0px">

    <div style="width:80%;background-color: white;margin: auto;">

      <div style="clear: both"></div>
      <el-input style="margin-top: 50px;width: 80%" v-model="title" placeholder="请输入文章标题"></el-input>

      <div style="text-align: left;width: 80%;margin: auto;margin-top: 30px ">
        上传文章缩略图:
        <el-upload
          class="avatar-uploader"
          action="http://localhost:9090/image"
          :show-file-list="false"
          :on-success="handleAvatarSuccess"
          :before-upload="beforeAvatarUpload">
          <img v-if="imageUrl" :src="imageUrl" class="avatar">
          <i v-else class="el-icon-plus avatar-uploader-icon" style="border-style: solid;border-radius: 15px"></i>
        </el-upload>
      </div>
      <div style="clear: both"></div>
      <div style="margin-top: 20px;float:left; margin-left: 130px ">
        是否原创:
        <el-switch
          v-model="checked"
          active-color="#13ce66"
          inactive-color="#ff4949">
        </el-switch>
      </div>
      <div style="clear: both"></div>

      <el-input style="margin-top: 50px; margin-bottom: 50px;width: 80%"
                type="textarea"
                :rows="10"
                placeholder="文章摘要"
                v-model="abstract_text">
      </el-input>
      <div style="width: 80%;margin: auto">
        <span style="text-align: left;display: block">文章内容:</span>
        <quill-editor
          ref="myQuillEditor"
          v-model="content"
          :options="editorOption"
          style="height: 500px"
        />
      </div>
      <el-button type="primary" @click="submit" style="margin-top:150px">提交</el-button>
    </div>

    <div style="margin-top: 100px"></div>

  </div>

</template>

<script>
  import 'quill/dist/quill.core.css'  //引入富文本
  import 'quill/dist/quill.snow.css'  //引入富文本
  import 'quill/dist/quill.bubble.css'  //引入富文本
  import quillEditor from 'vue-quill-editor'  //引入富文本
 
  export default 
    components: 
      quillEditor
    ,
    name: "Write",
    data() 
      return 
        abstract_text: '',
        title: "",
        checked: false,
        is_original: this.checked ? "是" : "否",
        imageUrl: "",
        thumbnail: "",
        content: '<h2>请输入文章内容</h2>',
        //富文本编辑器配置
        editorOption: ,
        blogType : "",
        typeName: "选择文章类型",
        typeId : ""
      
    ,
    created() //编写构造函数

      this.$axios.get("http://localhost:9090/verify/")
        .then((res) => 
        ).catch(() => 
        this.$router.push(path: "/Login")
        this.$message.error("没有登录请登录后发布文章!");
      );
      //获取顶部分类信息
      this.$axios.get('http://localhost:9090/blogType/queryBlogType')
        .then(response => (
          this.blogType = response.data
        )).catch(function (error)  // 请求失败处理
        console.log(error);
      );
    ,
    methods: 
      submit() 
        this.$axios.post('http://localhost:9090/blogging/save', 
          title: this.title,
          abstract_text: this.abstract_text,
          thumbnail: this.thumbnail,
          context: this.content,
          is_original: this.checked ? "是" : "否",
          typeId : this.typeId,

        ).then((res) => 
          this.$router.push("/");
          this.$message.success("文章发布成功!");
        ).catch(() => 
          this.$message.error("文章发布失败!");
        );

      ,

      handleAvatarSuccess(res, file) 
        this.imageUrl = URL.createObjectURL(file.raw);
        this.thumbnail = "http://localhost:9090/img/" + res;
      ,
      selectType(typename,id) 
        this.typeName = typename;
        this.typeId = id;
      ,
      beforeAvatarUpload(file) 
        const isJPG = file.type === 'image/jpeg';
        const isLt2M = file.size / 1024 / 1024 < 2;
        if (!isJPG) 
          this.$message.error('上传头像图片只能是 JPG 格式!');
        
        if (!isLt2M) 
          this.$message.error('上传头像图片大小不能超过 2MB!');
        
        return isJPG && isLt2M;
      
    
  
</script>

<style scoped>
  .avatar-uploader .el-upload 
    border: 1px dashed #d9d9d9;
    border-radius: 6px;
    cursor: pointer;
    position: relative;
    overflow: hidden;
  

  .avatar-uploader .el-upload:hover 
    border-color: #409EFF;
  

  .avatar-uploader-icon 
    font-size: 28px;
    color: #8c939d;
    width: 178px;
    height: 178px;
    line-height: 178px;
    text-align: center;
  

  .avatar 
    width: 178px;
    height: 178px;
    display: block;
  
</style>

3、设置访问路径

import Vue from 'vue'
import App from './App'
import router from './router'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import 'default-passive-events'
import './http';
Vue.config.productionTip = false
Vue.use(ElementUI)
/* eslint-disable no-new */

new Vue(
  el: '#app',
  router,
  components:  App ,
  template: '<App/>'
)

4、访问

访问:http://localhost:8080/#/Write

二、实现上传图片

1、实现上传图片的接口

在BlogController当中创建对应的上传图片的接口

    @PostMapping("image")
    public ResponseEntity<String> uploadImage(@RequestParam("file") MultipartFile file,HttpServletRequest request) throws IOException 
        String name = file.getOriginalFilename();
        IdWorker idWorker = new IdWorker(new Random().nextInt(10), 1);
        long l = idWorker.nextId();
        name = l+name;
        String property = System.getProperty("user.dir");
        file.transferTo(new File(System.getProperty("user.dir")+"\\\\src\\\\main\\\\webapp\\\\img\\\\"+name));
        return ResponseEntity.ok(name);
    

2、修改前端上传图片的路径

<el-upload
          class="avatar-uploader"
          action="http://localhost:9090/blog/image"
          :show-file-list="false"
          :on-success="handleAvatarSuccess"
          :before-upload="beforeAvatarUpload">
          <img v-if="imageUrl" :src="imageUrl" class="avatar">
          <i v-else class="el-icon-plus avatar-uploader-icon" style="border-style: solid;border-radius: 15px"></i>
        </el-upload>

3、重新运行后端程序测试上传图片的功能




上传图片成功

4、发表文章页面的全部代码

<template>

  <div style="width: 90%; background-color: #99a9bf;margin: auto;top: 0px;left: 0px">

    <div style="width:80%;background-color: white;margin: auto;">

      <div style="clear: both"></div>
      <el-input style="margin-top: 50px;width: 80%" v-model="title" placeholder="请输入文章标题"></el-input>

      <div style="text-align: left;width: 80%;margin: auto;margin-top: 30px ">
        上传文章缩略图:
        <el-upload
          class="avatar-uploader"
          action="http://localhost:9090/blog/image"
          :show-file-list="false"
          :on-success="handleAvatarSuccess"
          :before-upload="beforeAvatarUpload">
          <img v-if="imageUrl" :src="imageUrl" class="avatar">
          <i v-else class="el-icon-plus avatar-uploader-icon" style="border-style: solid;border-radius: 15px"></i>
        </el-upload>
      </div>

      <div style="clear: both"></div>
      <div style="margin-top: 20px;float:left; margin-left: 130px ">
        是否原创:
        <el-switch
          v-model="checked"
          active-color="#13ce66"
          inactive-color="#ff4949">
        </el-switch>
      </div>
      <div style="clear: both"></div>

      <el-input style="margin-top: 50px; margin-bottom: 50px;width: 80%"
                type="textarea"
                :rows="10"
                placeholder="文章摘要"
                v-model="abstract_text">
      </el-input>
      <div style="width: 80%;margin: auto">
        <span style="text-align: left;display: block">文章内容:</span>
        <quill-editor
          ref="myQuillEditor"
          v-model="content"
          :options="editorOption"
          style="height: 500px"
        />
      </div>
      <el-button type="primary" @click="submit" style="margin-top:150px">提交</el-button>
    </div>

    <div style="margin-top: 100px"></div>

  </div>

</template>

<script>
  import 'quill/dist/quill.core.css'
  import 'quill/dist/quill.snow.css'
  import 'quill/dist/quill.bubble.css'
  import quillEditor from 'vue-quill-editor'

  export default 
    components: 
      quillEditor
    ,
    name: "Write",
    data() 
      return 
        abstract_text: '',网站开发(周二):项目需求分析

...逐步向外扩展相关联的数据信息,由文章正文页可知,一篇文章有标题、分类、作者、浏览次数、发 查看详情

java之springboot入门到精通,springboot项目部署jar包方式,war包方式(一篇文章精通系列)(代码片段)

SpringBoot项目开发完毕后,支持两种方式部署到服务器:SpringBoot项目部署【jar包方式,war包方式】一、创建SpringBoot工程1、创建工程2、创建UserController二、jar包(官方推荐)1、打包2、运行jar包三、war包1、修改pom.xml的打包方式... 查看详情

java之mavenidea版入门到精通(一篇文章精通系列)(代码片段)

Java之Maven【IDEA版】入门到精通一、Maven简介1、传统项目管理状态分析2、Maven是什么3、Maven的作用二、下载与安装1、Maven下载2、Maven安装三、Maven基础概念1、仓库2、坐标3、本地仓库配置4、Maven阿里云(Aliyun)仓库5、全局setting与用... 查看详情

java之mavenidea版入门到精通(一篇文章精通系列)(代码片段)

Java之Maven【IDEA版】入门到精通一、Maven简介1、传统项目管理状态分析2、Maven是什么3、Maven的作用二、下载与安装1、Maven下载2、Maven安装三、Maven基础概念1、仓库2、坐标3、本地仓库配置4、Maven阿里云(Aliyun)仓库5、全局setting与用... 查看详情

一篇文章让你精通:java集合讲解(八,集合的解析与总结)

 一,集合初步认识https://blog.csdn.net/weixin_47514459/article/details/120957581二,List中ArrayList讲解https://blog.csdn.net/weixin_47514459/article/details/120978680三,List中LinkList讲解https://blog.csdn.net/weixin_47514459/article/details/121046624 四,... 查看详情

博客主题simplememory与本地markdown文件直接上传

...的操蛋,广告倒不是最重要的,最难受的是,那上面的一篇文章会被一百个人转载一千次,最最离谱的是这篇文章本身就有一万个坑。相较于CSDN,博客园显然更加的简洁、干净,上面的随意转载情况没那么严重,文章内容的可... 查看详情

阅读记录(12月)

...文章的地址,可点击查看原网页。由于内容很多,放在一篇文章中显得太长,故每个月一篇。2016-12-30C++内嵌第三方EXE程序窗口C++内嵌第三方EXE程序窗口-笨师兄-博客频道-CSDN.NETVC可执行程序中打开另一个可执行程序并将其嵌入到... 查看详情

java刷csdn博客流量的思路

...三个不同的ip地址。并且在某段时间内,同以ip访问同一篇文章,只能算是一次访问量。同一ip在某个时间段内访问同一博客不同的文章,被访问到的文章次数+1。知道上诉简单的原理之后,接下来就想解决的办法了。首先,准备... 查看详情

精通系列)安装+基本使用+项目创建+项目部署+文件操作+依赖管理+插件使用(代码片段)

...录Java之Gradle【IDEA版】入门到精通(上)(一篇文章精通系列)【安装+基本使用+项目创建+项目部署+文件操作+依赖管理+插件使用】Java之Gradle【IDEA版】入门到精通(下)(一篇文章精... 查看详情

精通系列)安装+基本使用+项目创建+项目部署+文件操作+依赖管理+插件使用(代码片段)

...录Java之Gradle【IDEA版】入门到精通(上)(一篇文章精通系列)【安装+基本使用+项目创建+项目部署+文件操作+依赖管理+插件使用】Java之Gradle【IDEA版】入门到精通(下)(一篇文章精... 查看详情

精通系列)安装+基本使用+项目创建+项目部署+文件操作+依赖管理+插件使用(代码片段)

...录Java之Gradle【IDEA版】入门到精通(上)(一篇文章精通系列)【安装+基本使用+项目创建+项目部署+文件操作+依赖管理+插件使用】Java之Gradle【IDEA版】入门到精通(下)(一篇文章精... 查看详情

精通系列)创建springboot项目+基于ssm多模块项目案例+微服务实战(代码片段)

...录Java之Gradle【IDEA版】入门到精通(上)(一篇文章精通系列)【安装+基本使用+项目创建+项目部署+文件操作+依赖管理+插件使用】Java之Gradle【IDEA版】入门到精通(下)(一篇文章精... 查看详情

精通系列)创建springboot项目+基于ssm多模块项目案例+微服务实战(代码片段)

...录Java之Gradle【IDEA版】入门到精通(上)(一篇文章精通系列)【安装+基本使用+项目创建+项目部署+文件操作+依赖管理+插件使用】Java之Gradle【IDEA版】入门到精通(下)(一篇文章精... 查看详情

精通系列)创建springboot项目+基于ssm多模块项目案例+微服务实战(代码片段)

...录Java之Gradle【IDEA版】入门到精通(上)(一篇文章精通系列)【安装+基本使用+项目创建+项目部署+文件操作+依赖管理+插件使用】Java之Gradle【IDEA版】入门到精通(下)(一篇文章精... 查看详情

小技巧-怎样让你的csdn博客被更多人关注?

前言众所周知,想要自己的博客文章能够被更多人阅读、受益,最重要的当然是文章的内容了。但是除此以外,还有没有一些小技巧增加自己文章的曝光率呢?答案是肯定的!介绍答案是——借助百度、谷歌... 查看详情

csdn博客系统

...之间相互关注,当被关注放发布文章时,会将这篇文章推送给关注方,因为本身就是一个小项目,在实现方面就选择了适合小规模场景的RabbitMQ,为了保证系统的可用性,搭建了MQ镜像集群,HAmode设为All... 查看详情

csdn截止目前为止有多少的博客专家以及比例人数?

...数目,搜索不出来;于是就在CSDN博客里面查了一篇文章。截止到2017年3月8日,全网总的博客专家是:1387人。记得2011年CSDN数据泄露的时候,注册用户已经达到600万左右,经过6年的历程,保守估计CSDN的... 查看详情

如何csdn复制他人博客文章到自己博客下

...</p>CSDN是中文第一大互联网技术网站,上面有很多好的文章,有时候需要复制别人的文章到自己的文章下进行修改重新发布,这要怎样做呢?工具/原料一篇喜欢的博客属于自己的csdn账号chrome浏览器方法/步骤首先,在自己喜欢的博... 查看详情