首页 > 其他分享 >Vue怎么使用Upload组件进行图片上传到阿里云OSS,并

Vue怎么使用Upload组件进行图片上传到阿里云OSS,并

时间:2024-03-30 13:00:54浏览次数:27  
标签:Vue String 上传 OSS Upload Result file import com

基于前端用Vue2后端用Springboot进行讲解

一、创建阿里云OSS

       对象存储 OSS_云存储服务_企业数据管理_存储-阿里云 (aliyun.com),打开网站进行开通

        开通后我们来到Bucket列表,创建Bucket

        

        创建过程:后面就默认就行了

        

        创建完成后我们获取上传所需要的数据,bucketName、endpoint、 accessKeyId、 accessKeySecret

        buckerName就是刚刚创建Bucket的名字

        

        endpoint在Bucket的概述里,我们点进去就能看见

        

        accessKeyId和accessKeySecret需要我们去验证索取,我们把鼠标悬浮到右上角的头像去会有一个弹出层,点击accessKey进去就可以获取

        

        阿里云的OSS的所需的数据我们以及获取完了,接下来我们一起来看下代码

二、Vue前端

        我们先来看下前端代码  

<el-upload
  action="https://jsonplaceholder.typicode.com/posts/"
  list-type="picture-card"
  :on-preview="handlePictureCardPreview"
  :on-remove="handleRemove"
  :on-success="handleUploadSuccess">
  <i class="el-icon-plus"></i>
</el-upload>
<el-dialog :visible.sync="dialogVisible">
  <img width="100%" :src="dialogImageUrl" alt="">
</el-dialog>
<script>
  export default {
    data() {
      return {
        dialogImageUrl: '',
        dialogVisible: false
      };
    },
    methods: {
      handleRemove(file, fileList) {
        console.log(file, fileList);
      },
      handlePictureCardPreview(file) {
        this.dialogImageUrl = file.url;
        this.dialogVisible = true;
      },
      handleUploadSuccess1(response) {
        // 在这里可以从 response 中获取上传成功后的 URL
        console.log('上传成功', response);
      }
    }
  }
</script>

         <el-upload>就是上传组件,action是上传图片的后端接口,当选择照片后会自动上传并返回响应结果

        :on-preview是查看上传成功的照片

        :on-remove是移除上传成功的照片

        :on-success是图片上传成功后的调用函数,通常会在函数里获取响应结果的Url

三、SpringBoot后端

        后端我就直接上代码了

        首先在yml文件加上阿里云OSS的配置

        

        再在xml文件中加入阿里云OSS的依赖

        <!--       阿里云OSS -->
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.15.1</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>dysmsapi20170525</artifactId>
            <version>2.0.9</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-core -->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.1.1</version>
        </dependency>

        Controller层

package com.water.Controlller;


import com.water.Pojo.Result;
import com.water.Service.UploadService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;


@RestController
@CrossOrigin("你的前端url")
@Slf4j
public class UploadController {
    //阿里云存储文件
    @Autowired
    private UploadService uploadService;
    @PostMapping("/Upload")
    public Result upload(MultipartFile file) throws IOException {
        log.info("上传文件,文件名称:{}",file.getOriginalFilename());
        //调用阿里云OSS工具类,将上传上来的文件存入阿里云
        //上传文件到阿里云oss  获取上传文件
        String url = uploadService.upload(file);
        //将图片上传完成后的url返回,用于浏览器回显展示
        System.out.println(url);
        return Result.success(url);
    }
}

        Service层

package com.water.Service;

import org.springframework.web.multipart.MultipartFile;

public interface UploadService {
    //上传文件到阿里云oss
    String upload(MultipartFile file);
}

        ServiceImpl层

package com.water.Service.ServiceImpl;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.water.OSS.ConstantOssPropertiesUtils;
import com.water.Service.UploadService;
import org.joda.time.DateTime;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;

@Service
public class UploadServiceImpl implements UploadService {


    @Override
    public String upload(MultipartFile file) {
        // Endpoint以杭州为例,其它Region请按实际情况填写。
        String endpoint = ConstantOssPropertiesUtils.EDNPOINT;
        String accessKeyId = ConstantOssPropertiesUtils.ACCESS_KEY_ID;
        String accessKeySecret = ConstantOssPropertiesUtils.SECRECT;
        String bucketName = ConstantOssPropertiesUtils.BUCKET;
        try {
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            // 上传文件流。
            InputStream inputStream = file.getInputStream();
            String fileName = file.getOriginalFilename();
            //生成随机唯一值,使用uuid,添加到文件名称里面
            String uuid = UUID.randomUUID().toString().replaceAll("-","");
            fileName = uuid+fileName;
            //按照当前日期,创建文件夹,上传到创建文件夹里面
            //  2021/02/02/01.jpg
            String timeUrl = new DateTime().toString("yyyy/MM/dd");
            fileName = timeUrl+"/"+fileName;
            System.out.println(bucketName);
            System.out.println(fileName);
            System.out.println(inputStream);

            //调用方法实现上传
            ossClient.putObject(bucketName, fileName, inputStream);
            // 关闭OSSClient。
            ossClient.shutdown();
            //上传之后文件路径
            // https://  yygh-lxyk   .oss-cn-beijing.aliyuncs.com      /01.jpg
            String url = "https://"+bucketName+"."+endpoint+"/"+fileName;
            //返回
            System.out.println(url);
            return url;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
}

         我的Result类(放在实体类中)

package com.water.Pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result {
    private Integer code;//响应码,1 代表成功; 0 代表失败
    private String msg;  //响应信息 描述字符串
    private Object data; //返回的数据

    //增删改 成功响应
    public static Result success(){
        return new Result(1,"success",null);
    }
    //查询 成功响应
    public static Result success(Object data){
        return new Result(1,"success",data);
    }
    //失败响应
    public static Result error(String msg){
        return new Result(0,msg,null);
    }
}

        这样便能实现ElementUpload组件上传照片了 

标签:Vue,String,上传,OSS,Upload,Result,file,import,com
From: https://blog.csdn.net/None_ones/article/details/137169244

相关文章

  • vue3+threejs新手从零开发卡牌游戏(二十二):添加己方游戏流程(先后手、抽牌、主要阶段、战
    首先在utils/common.ts里定义一些流程相关的变量:constflow=ref([//游戏流程{name:"抽卡阶段"},{name:"主要阶段"},{name:"战斗阶段"},{name:"结束阶段"}])constflowIndex=ref(......
  • thinkphp+Laravel+vue实验室预约课程管理系统t1g73
     Laravel非常的简洁并且是开源的,Laravel是一个具有表现力、优雅语法的Web应用程序框架.Laravel是构建现代全栈Web应用程序的最佳选择.它的语法更富有表现力,拥有高质量的文档和丰富的扩展包,技术上它有Bundle扩展包、EloquentORM、反向路由、迁移、Restful控制器、自......
  • Vue父组件拿到接口的数据,并把数据传给子组件的问题;同时,父组件数据更新,子组件同样拿到
    参考文档:https://blog.csdn.net/qq_33723676/article/details/128143924问题一:父组件向子组件传值,子组件拿到的是空数据。在vue中,有时需要在父组件页面调用接口时,并把数据传给子组件。一般的做法中,子组件拿不到父组件传过来的值。原因是什么捏???原因就是:父组件跟子组件获取数据是......
  • Vuex的核心组成、版本问题及store.js的使用、 Vuex中存值、取值以及获取变量值、异步
    Vuex的核心组成、版本问题及store.js的使用、Vuex中存值、取值以及获取变量值、异步同步操作和Vuex后台交互  //store//初始值//设置值mutations  ---this.$store.commit('setDemoValue方法名',value); //更新值action --this.$store.disp......
  • CrossOver2024最新免费版虚拟机软件 Mac和Linux系统上运行Windows 应用/游戏 CrossOve
    CrossOver是一款由CodeWeavers公司开发的,运行在Mac和Linux操作系统下,能够模拟Windows系统应用运行环境的软件。它不需要用户单独安装Windows操作系统,就能让Windows平台上的应用程序在Mac和Linux上顺畅运行。CrossOver在技术上使用了Wine(Windows模拟器)的代码,通过提供一个兼容层,......
  • Springboot+vue的高校科研信息管理系统(有报告)。Javaee项目,springboot vue前后端分离项
    演示视频:Springboot+vue的高校科研信息管理系统(有报告)。Javaee项目,springbootvue前后端分离项目。项目介绍:采用M(model)V(view)C(controller)三层体系结构,通过Spring+SpringBoot+Mybatis+Vue+Maven来实现。MySQL数据库作为系统数据储存平台,实现了基于B/S结构的Web系......
  • 使用vue2实现在线创建组件的功能
    前言我们使用vue2构建了一个项目,项目有个需求:用户可以在线创建vue组件,创建后的组件可以动态编译,项目无需重新部署,就可以在表单等位置引入使用组件。实现记录引用vue的esm包项目中引入vue的代码,原来是importVuefrom'vue'改为importVuefrom'vue/dist/vue.esm'vue.c......
  • “百度杯”CTF比赛 九月场-Upload
    “百度杯”CTF比赛九月场Upload:类型:web题目描述:想怎么传就怎么传,就是这么任性。tips:flag在flag.php中解题方法:打开靶机,获得题目链接是一个文件上传类型的:看到文件上传,就想到一句话木马,先上传一个一句话木马上去:<?php@eval($_POST["1"]);?>上传成功,我们点击这个上传......
  • Node+Vue毕设音乐制作资源分享网站(程序+mysql+Express)
    本系统(程序+源码)带文档lw万字以上 文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:在音乐创作和制作的领域,资源的获取与分享一直是创作者们非常关注的话题。随着互联网的普及与发展,人们越来越倾向于通过网络平台交流思想、分享作品以及寻找......
  • Node+Vue毕设音乐推荐网站(程序+mysql+Express)
    本系统(程序+源码)带文档lw万字以上 文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:在当今信息化时代,音乐已经成为人们生活中的重要元素之一。随着互联网技术的不断发展,人们对于音乐的消费方式也在发生着翻天覆地的变化。传统的音乐传播方式......