当前位置: 首页 > article >正文

文件上传、amrkdown编辑器

一、文件上传

这里我以图片为例,进行上传,上传到阿里云oss(对象存在中)

首先,我们先梳理一下,图片上传的流程

1、前端选择文件,提交文件

前端提交文件,我们可以使用ElementUI中的文件上传组件,在这里我是以用户头像上传为例的,会了这一个,其他的示例只要修改一下即可。在使用的过程中一定要认真的看ElementUI

Element - 网站快速成型工具

	<el-form-item label="封面图">
				<!-- :show-file-list="false" false 显示一个,ture显示多个-->
				<!-- action="" 后端的一个接口 ,我们自己定义接口使用即可 --> 
				<!-- 提交时遇到俩个问题
				  1、地址不会自动补全ip和接口
				  2、不会提交token
				  原因:不是axios提交的,-->
				<!-- 提交的键是file -->
				<el-upload class="avatar-uploader" 
					:action="serverAddress" 
					:headers="{adminToken:adminToken}"
					:data="{oldimg:form.coverImage}"
					:show-file-list="false" 
					:on-success="handleAvatarSuccess" 
					:before-upload="beforeAvatarUpload">
					<img v-if="form.coverImage" :src="form.coverImage" class="avatar">
					<i v-else class="el-icon-plus avatar-uploader-icon"></i>
				</el-upload>
			</el-form-item>

2、后端接收文件

先搭建后端接口(我是使用springboot框架搭建的,这里我们要确保的是发送的post请求)

    @PostMapping(path = "/uploadImg")//必须为post请求
    public Result uploadImg(@RequestParam("file") CommonsMultipartFile commonsMultipartFile) throws IOException {
        String url=null;
       //我们把文件上传到阿里云oss对象存储空间
        //为了避免上传的文件重名,重新生成一个文件名
        String newFileName = new Date().getTime()+commonsMultipartFile.getOriginalFilename();
        //连接oss
        OSS ossClient = new OSSClientBuilder().build("https://"+endpoint, accessKeyId, accessKeySecret);
        //长传文件
        ossClient.putObject(bucketName, newFileName, commonsMultipartFile.getInputStream());
        //拼接文件在oss中访问地址
        url = "https://"+bucketName+"."+endpoint+"/"+newFileName;
       return  new Result(200,"上传成功",url);
    }

接收文件

由于前端提交的文件是以二进制的形式进行提交的,所以后端常规的接收是接收不到的。

我们使用apache提供的文件解析组件,将提交的二进制数据进行解析。

但是使用apache的组件解析过程仍然很麻烦,还可以使用spring框架,spring框架对这一过程右进行了封装,使得解析文件过程非常简单

导入依赖

<!--apache文件上传组件-->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.3</version>
        </dependency>

 在添加spring提供的文件解析器类(这段代码不需要我们自己写,直接拿去用即可)

package com.ffyc.news.config;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;

@Configuration
public class MultipartConfig {

	/**
     * 文件上传配置
     * @return
     */
    @Bean
    public CommonsMultipartResolver multipartConfigElement() {
    	CommonsMultipartResolver multipartresolver = new CommonsMultipartResolver();
    	multipartresolver.setMaxUploadSize(1024*1024*5);
        return multipartresolver;
    }
}

3、后端存储文件

后端存储文件有三种方式

1、把文件存储到数据库当中(当然这里我们是不建议的),因为图片比较大,占用空间,查询效率低。

2、把文件上传到后端服务器中,需要我们自己提供一个服务器来存储上传的图片,(这个方法是我们常使用的方法,适合自己练习中使用,但是这里我们不使用,使用第三种)。

3、把文件上传到云平台(阿里云、腾讯云等等,我们以阿里云为例),直接返回云平台的公网地址,我们可以直接访问到云平台的文件。

第一次使用的阿里云oss对象存储可以看此过程

访问阿里云官网:https://www.aliyun.com/

1、首先按照正常步骤注册或者登录即可

2、点击控制台

3、进入产品列表

4、选择oss对象存储

5、开通oss对象存储功能(这里还要完成实名认证)

6、进入bucket列表,创建bucket列表

 

 

7、测试上传文件

 最后,我们在这里就可以前后端交互的形式实现图片(其他的文件)上传。

二、amrkdown编辑器

1、Vue 项目集成 mavonEditor 编辑器搭建

1、安装:

npm install mavon-editor --save

2、在main.js中进行配置

 //导入Vue 项目集成 mavonEditor 编辑器搭建
   import mavonEditor from 'mavon-editor';
   import 'mavon-editor/dist/css/index.css';
   Vue.use(mavonEditor);

3、组件引入

<-- 哪里使用amrkdown,就在哪里使用该标签 -->
<mavon-editor ref="md" v-model="form.content" :toolbars="toolbars" @imgAdd="imgAdd" @imgDel="imgDel" />


<-- 
在 data 中定义工具栏::toolbars="toolbars"
 @imgAdd="imgAdd" 上传图片事件
 @imgDel="imgDel" 删除图片事件
-->

	data() {
			return {
				
				toolbars: {
					bold: true, // 粗体
					italic: true, // 斜体
					header: true, // 标题
					underline: true, // 下划线
					strikethrough: true, // 中划线
					mark: true, // 标记
					quote: true, // 引用
					ol: true, // 有序列表
					ul: true, // 无序列表
					link: true, // 链接
					imagelink: true, // 图片链接
					code: true, // code
					table: true, // 表格
					fullscreen: true, // 全屏编辑
					readmodel: true, // 沉浸式阅读
					htmlcode: true, // 展示 html 源码
					help: true, // 帮助
					undo: true, // 上一步
					redo: true, // 下一步
					trash: true, // 清空
					save: false, // 保存(触发 events 中的 save 事件)
					navigation: true, // 导航目录
					subfield: true, // 单双栏模式
					preview: true // 预览
				}
				
			}
				}

 下面就是amrkdown编辑器

 

2、对应处理函数

在这里我们使用的后端服务器,和上面介绍的图片长传的是同一个地址

//amrkdown编辑器中上传图片
			imgAdd(pos, file) {
				var formdata = new FormData();
				formdata.append('file', file); //前端封装图片数据 ‘file’向后端传递的 name
				this.$http({ //调用 java 后端上传图片到服务器端
					url: this.serverAddress, //自定义后端服务器地址,后端同文件上传功能
					data: formdata,
					method: "post",
					headers: {
						'Content-Type': 'multipart/form-data',
						'adminToken': this.adminToken
					},
				}).then((resp) => { //resp 后端响应数据
					//将服务器返回的图片地址插入到编辑器内
					this.$refs.md.$img2Url(pos, resp.data.data);
				})
			},
			//amrkdown编辑器中删除图片
			imgDel(pos) {
				var imgUrl = pos[0]; //获取到图片服务器地址
				alert(imgUrl)
				this.$http.get("/api/newsCtl/deleteImg", {
						params: {
							imgurl: JSON.stringify(imgUrl)
						}
					})
					.then(function(res) {
						//删除回调
					})
			},

 

 图片上传成功

想要删除的话


http://www.kler.cn/news/323413.html

相关文章:

  • 挑战Gitee仓库空间极限:Centos下自建Git Server的部署之旅
  • pdb_strand_id、asym_id 和 entity_id的相互映射
  • 将Pytorch环境打包,快速部署到另一台机器上(在没有网络,或者网络环境不好的情况下推荐使用)
  • 如何禁止电脑上某个软件运行?电脑设置禁止运行软件的4个方法速成
  • 【深度学习基础模型】去噪自编码器 (Denoising Autoencoders, DAE)详细理解并附实现代码。
  • 如何正确连接和使用滑动变阻器?
  • 信息技术网络安全政策制定
  • GO Serial 学习与使用
  • 决策树与随机森林在机器学习中的应用
  • [数据集][目标检测]猪数据集VOC-2856张
  • 一文上手Kafka【下】
  • 快速订餐:Spring Boot 点餐系统
  • 搭建本地AI聊天界面:Open WebUI与Ollama实战指南
  • 63.【C语言】再议结构体(上)
  • 算法打卡:第十一章 图论part08
  • 什么是算力?cpu+显卡吗?
  • 【JAVA-数据结构】时间和空间复杂度
  • ubuntu中通过源码安装pointnet2_ops_lib
  • 360周鸿祎为什么说大模型已成茶叶蛋?
  • html+css+js实现Progress 进度条
  • 差速轮纯跟踪算法
  • 设备管理平台-支持快速开发
  • Woocommerce怎么分类显示产品?如何将Shopify的产品导入到Woocommerce?
  • 如何恢复被删除的 GitLab 项目?
  • git rebase 调整提交顺序
  • springboot 实现用户登录身份验证
  • 【NLP】daydayup 词向量训练模型word2vec
  • Maven中 <parent > 的<version>可以使用变量吗
  • Unity3D入门(四) : Android和Unity3D交互 - Unity调用Android
  • FreeRTOS 内存管理源码解析