首页 前端知识 Vue怎么使用Upload组件将图片上传到阿里云OSS,并返回图片URL

Vue怎么使用Upload组件将图片上传到阿里云OSS,并返回图片URL

2024-04-15 21:04:26 前端知识 前端哥 520 46 我要收藏

基于前端用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组件上传照片了 

转载请注明出处或者链接地址:https://www.qianduange.cn//article/4998.html
评论
发布的文章

JQuery中的load()、$

2024-05-10 08:05:15

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!