使用Mavon-Editor编辑器上传本地图片到又拍云云存储(Vue+SpringBoot)

news2024/10/6 12:23:55

需求:将本地的图片上传到服务器或者云存储中,考虑之后,这里我选的是上传到又拍云云存储。

技术背景:
前端:Vue+Ajax
后端:SpringBoot
存储:又拍云云存储

原理:Mavon-Editor编辑器有两个重要的属性和事件

ref="md"     
@imgAdd="imgAdd"

所以需要将用到Mavon-Editor编辑器的组件中添加上这个属性和事件。
在这里插入图片描述
然后在方法中定义imgAdd函数
在这里插入图片描述
代码片段:

 // 上傳圖片script部分
    imgAdd(pos, file) {
      //这里的pos指的是在数组中的下标
      //这里创建FormData对象并将从本地获取到的file值存入。
      var formdata = new FormData();
      formdata.append("file", file);

      getimgurl(formdata)
        .then((response) => {
          // 请求成功,获取后端返回的字符串数据
        //   const url = response;
        //   console.log("返回的字符串数据:", response);
		  this.$refs.md.$img2Url(pos, response);//直接賦值就好了
        })
        .catch((error) => {
          // 请求失败,处理错误
          console.error("请求失败0000:", error);
        });

     
    },

其中请求路径是你自己的后端
例如:http:localhost:8080/admin/xxx
在这里插入图片描述

后端需要做的:

1:导包

<!--        又拍云配置-->
        <dependency>
            <groupId>com.upyun</groupId>
            <artifactId>java-sdk</artifactId>
            <version>4.2.3</version>
        </dependency>

2:编写控制层处理前端请求

import com.UpYun;
import com.upyun.UpException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.UUID;

/**
 * 功能描述
 *
 * @author:
 * @date: 2023年08月20日 15:37
 */
@RestController
@RequestMapping("/admin")
@CrossOrigin(origins = "*", methods = {RequestMethod.GET, RequestMethod.POST, RequestMethod.PUT, RequestMethod.DELETE},
        allowedHeaders = {"Content-Type", "Authorization"})
public class ImgUpload {
    @Value("${upload.upyun.bucket-name}")
    private String bucketName;
    @Value("${upload.upyun.username}")
    private String username;
    @Value("${upload.upyun.password}")
    private String password;
    //上面的可以直接写死,不需要注入,
    @PostMapping("imgAdd")
    // 这个路径就是前端发post请求的路径
    public String uploadImg( MultipartFile file) throws UpException, IOException {
        // 拼接文件名
//        System.out.println("进来了"+file);
        String trueFileName =file.getOriginalFilename();
//        String suffix = trueFileName .substring(trueFileName .lastIndexOf("."));
        String fileName = UUID.randomUUID().toString()+trueFileName;

        // 上传到又拍云

        UpYun upYun=new UpYun(bucketName,username,password);
//        UpYun upYun=new UpYun("空间名","操作员名称","操作员密码");
        String dirPath="/img/blog-img/";

        //  为每个文章创建了一个文件夹
        boolean mkDir = upYun.mkDir(dirPath);
        if(mkDir){
//            System.out.println(dirPath+fileName);
            upYun.writeFile(dirPath+fileName,file.getBytes(),false);

            String url="https://你的域名"+dirPath+fileName;
            System.out.println("url: "+url.toString());
            return url;
        }else {
            return "后端:图片上传失败";
        }

    }

}

主要思想:就是前端将本地上传的文件通过发送Ajax请求传递给后台,后台将图片上传到云存储中,然后再向前端返回图片存储的路径,这样就能正常显示在界面上了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/910466.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大模型框架LangChain开发实战(二)

一、关于数据的准备及项目背景 Notion提供了团队管理的功能&#xff0c;方便团队成员进行在线协作办公&#xff0c;提高交互效率&#xff0c;notion上面的数据可能包括项目的数据&#xff0c;进度管理的数据&#xff0c;企业服务的数据等等&#xff0c;这里使用了从notion网站…

【校招VIP】产品分析能力之用户画像出发

考点介绍&#xff1a; 用户行为和交互是产品经理能力的重要部分&#xff0c;在校招中&#xff0c;基于用户画像的分析题和设计题也是高频考点。 『产品分析能力之用户画像出发』相关题目及解析内容可点击文章末尾链接查看&#xff01; 一、考点题目 1. 爱奇艺中搜索关键词“…

【C++ 学习⑮】- 模板进阶

目录 一、必须使用 typename 的场景 二、非类型模板参数 三、模板的特化 3.1 - 函数模板特化 3.2 - 类模板特化 3.2.1 - 全特化 3.2.2 - 偏特化 四、类模板分离式编译 4.1 - 分离编译的概念 4.2 - 类模板分离式的问题 4.3 - 解决方案 一、必须使用 typename 的场景 …

shell 基础3

在第一行后面追加内容 在第3行后面追加内容 在每行前面加 在第四行前面加入 -i表示添加在文本中 在每个22后面加 $a 在文件最后一行追加 匹配到每个包含22的行&#xff0c;并在之前加 把第7行整行替换 将所有匹配22的行替换 删除第5行 隔行删除&#xff0c;删除奇数行 删除偶数…

live555server环境搭建

live555环境搭建详解&#xff08;ubuntu18.04&#xff09; 1.环境依赖 openssl可选安不安 安装&#xff08;选择好版本&#xff09; sudo apt-get update sudo apt-get install openssl sudo apt-get install libssl-dev使用头文件是否可用时编译测试时记得链接&#xff08…

【C++入门到精通】C++入门 —— priority_queue(STL)优先队列

阅读导航 前言一、priority_queue简介1. 概念2. 特点 二、priority_queue使用1. 基本操作2. 底层结构 三、priority_queue模拟实现⭕ C代码⭕priority_queue中的仿函数 总结温馨提示 前言 ⭕文章绑定了VS平台下std::priority_queue的源码&#xff0c;大家可以下载了解一下&…

C#,数值计算——Ridders的多项式外推方法的计算方法与源程序

using System; namespace Legalsoft.Truffer { /// <summary> /// 通过Ridders的多项式外推方法返回函数func在点x处的导数。 /// 输入值h作为估计的初始步长&#xff1b;它不需要很小&#xff0c;而是应为x上的增量&#xff0c; /// 在此增量上func将发…

在CMD中找不到Bootrec/fixboot元素怎么办?

当您尝试在CMD中执行Bootrec/fixboot以修复Windows 7/8.1/8/10/11和Windows Server 2012等操作系统中的系统启动问题时&#xff0c;通常会遇到Bootrec/fixboot参数无效的情况。这类启动问题可能是由磁盘克隆、系统迁移、Windows更新、MBR和GPT转换等引起的。当一个问题仍然存在…

YOLO目标检测——矿石数据集图片下载分享

矿石图片&#xff0c;其中训练集包括“玄武岩”、“花岗岩”、“大理石”、“石英岩”、“煤”、“石灰石”、“砂岩”七种矿石图片。测试集包括24张相应的七种矿石图像。 数据集点击下载&#xff1a; 矿石数据集4500图片数据说明.rar

OpenGL学习路程(一)

Hello啊各位&#xff0c;鸽了挺长时间没更新&#xff0c;其实是博主找到新乐子了。 如标题所说&#xff0c;我正在学习OpenGL。 现在已经成功的调用显卡画出了一个三角形&#xff0c;这虽然不是什么大的成就&#xff0c;但已经让我很兴奋了。 我不打算在这里写出我配置openg…

Pyqt5-开源工具分解功能(文本拖拽)

开源第四篇:功能实现之拖拽功能与配置文件。 写这个功能的初衷,是因为,每次调试我都要手动敲命令,太麻烦了,想偷个懒,所以直接给这功能加上了,顺便衍生出了另一个想法,配置文件自动填写相关数据。 先看个简单的拖拽功能: 很明显吧,还是比较便捷的。所以我们本章,就在…

TextView加粗字体太粗

解决方法如下&#xff1a; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.util.AttributeSet;import androidx.annotation.Nullable; import androidx.appcompat.widget.AppCompatTextView;/*** 自定义加粗…

【真人语音】讯飞星火个人声音训练及导出工具V0.2.exe

【项目背景】 小编一直在尝试着短视频技术&#xff0c;在读文案的时候经常会读错&#xff1b;所以&#xff0c;只能用微软或者剪映的文本转语音软件。 很早之前在Github上也看到过真人人声训练的开源代码&#xff0c;尝试过一番之后&#xff0c;也是以失败告终&#xff1b;就…

若依项目的运行详细步骤

目录 一、项目的解读与获取 二、项目的运行 后端步骤(ruoyi-admin) &#xff08;一&#xff09;导入若依的2个SQL文件 版本建议 &#xff08;二&#xff09;Redis的配置 &#xff08;三&#xff09;启动后端 前端步骤(ruoyi-ui) 版本建议 &#xff08;一&#xff09;…

深入了解Git:介绍及常用命令指南

当今软件开发领域中&#xff0c;版本控制是一个至关重要的概念&#xff0c;而Git作为最流行的分布式版本控制系统&#xff0c;发挥着不可替代的作用。本文将介绍Git的基本概念以及常用命令&#xff0c;帮助你更好地理解和使用这一强大的工具。 Git简介 Git是一种分布式版本管…

结构化知识管理-20张思维导图为例子

思维导图&#xff0c;是结构化思考最高效的工具。 以中心主题为核心&#xff0c;通过各级主题的组合来呈现信息。 思维导图的可视化图形表达&#xff0c;让我们可以更加便于理解和记忆。各主题间相互连接的形式&#xff0c;展现了信息间的相关性。促进我们综合性的思考。思维导…

飞机打方块(三)特殊按钮制作

一、特殊按钮容器 1.新建PropController脚本&#xff0c;并绑定新建的特殊按钮容器节点 GameController.ts property({ type: cc.Node, displayName: "特殊按钮节点", tooltip: "特殊按钮节点&#xff0c;分别为全消无敌和菜单" })special_btn: cc.Node …

三种生成树(STP,RSTP,MSTP)的基本配置(自我理解)

目录 一、为什么要使用生成树&#xff08;STP)&#xff1a; 二、由于设备冗余而导致的问题&#xff1a; 广播风暴&#xff1a; 三、802.1D生成树基本配置 四、802.1D生成树实验 实验拓扑&#xff1a; 实验配置&#xff1a; 配置完成后&#xff0c;在SW8上观察现象&…

[Docker] Windows 下基于WSL2 安装

Docker 必须部署在 Linux 内核的系统上。如果其他系统想部署 Docker 就必须安装一个虚拟 Linux 环境。 1. 开启虚拟化 进入系统BIOS&#xff08;AMD 为 SVM&#xff1b;Intel 为 Intel-vt&#xff09;改为启用(enable) 2. 开启WSL 系统设置->应用->程序和功能->…

前端 -- 基础 HTML基本语法 结构标签介绍

HTML 语法规范 基本语法概述 : HTML 标签是由尖括号包围的关键词&#xff0c;示例 &#xff1a; <html> HTML 标签通常是成对出现的&#xff0c;例如 <html > 和 < /html > &#xff0c; 我们称为双标签。 标签对中的第一个标签是 开始标签&#xff0c;…