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

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

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

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

复制代码
ref="md"     
@imgAdd="imgAdd"

所以需要将用到Mavon-Editor编辑器的组件中添加上这个属性和事件。

然后在方法中定义imgAdd函数

代码片段:

javascript 复制代码
 // 上傳圖片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:导包

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

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

java 复制代码
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请求传递给后台,后台将图片上传到云存储中,然后再向前端返回图片存储的路径,这样就能正常显示在界面上了。

相关推荐
yusirxiaer1 天前
为什么 markRaw 能修复 Vue 3 + ECharts 的 resize 报错
javascript·vue.js·echarts
赛博切图仔1 天前
前端性能内卷终点?Signals 正在重塑我们的开发习惯
前端·javascript·vue.js
Highcharts.js1 天前
抉择之巅:从2029年回望2026年——企业可视化“战略分水岭”?
前端·javascript·信息可视化·编辑器·echarts·highcharts
Tirzano1 天前
SpringOAuth2Server 自定义授权码认证,登录和授权码混合
spring boot
一 乐1 天前
饮食营养信息|基于springboot + vue饮食营养管理信息平台系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·饮食营养管理信息系统
军军君011 天前
数字孪生监控大屏实战模板:空气污染监控
前端·javascript·vue.js·typescript·前端框架·echarts·数字孪生
练习前端两年半1 天前
Vue3 KeepAlive 深度揭秘:组件缓存的魔法是如何实现的?
前端·vue.js·面试
ntGrace1 天前
Windows环境下,在Vscode里利用ESP-IDF开发ESP32S3项目时,不能构建的问题1及解决方法
vscode·编辑器
AIBox3651 天前
vscode api 配置怎么做:第三方大模型接入 VS Code 的完整方法
ide·人工智能·vscode·gpt·语言模型·编辑器
Devin~Y1 天前
大厂Java面试实战:Spring Boot/WebFlux、Redis+Kafka、K8s可观测性与Spring AI RAG/Agent三轮连环问
java·spring boot·redis·kafka·kubernetes·resilience4j·spring webflux