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

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

  • 30
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3是一种流行的JavaScript框架,用于构建用户界面。它具有响应式数据绑定、组件化开发和虚拟DOM等特性,使得开发者可以更高效地构建交互式的Web应用程序。 要在Vue3中实现上传图片阿里云OSS,你可以按照以下步骤进行操作: 1. 安装依赖:首先,你需要安装阿里云OSS的JavaScript SDK。可以使用npm或yarn命令来安装,例如: ``` npm install ali-oss ``` 2. 配置OSS客户端:在Vue3的代码中,你需要创建一个OSS客户端实例,并配置相关参数,如AccessKeyId、AccessKeySecret、Endpoint等。这些参数可以在阿里云OSS控制台中获取。 3. 创建上传组件:在Vue3中,你可以创建一个上传组件,用于选择图片文件并触发上传操作。可以使用`<input type="file">`元素来实现文件选择功能,并监听其`change`事件。 4. 上传图片:在上传组件中,你可以编写上传图片的逻辑。当用户选择了图片文件后,你可以通过OSS客户端调用`put`方法来上传图片文件到阿里云OSS。 下面是一个简单的示例代码,演示了如何在Vue3中上传图片阿里云OSS: ```javascript <template> <div> <input type="file" @change="handleFileChange"> </div> </template> <script> import OSS from 'ali-oss'; export default { methods: { handleFileChange(event) { const file = event.target.files[0]; const client = new OSS({ accessKeyId: 'your-access-key-id', accessKeySecret: 'your-access-key-secret', bucket: 'your-bucket-name', region: 'your-oss-region', // 其他配置参数... }); // 生成唯一的文件名 const fileName = Date.now() + '-' + file.name; // 调用OSS客户端的put方法上传文件 client.put(fileName, file).then(response => { console.log('上传成功', response); // 在这里可以处理上传成功后的逻辑 }).catch(error => { console.error('上传失败', error); // 在这里可以处理上传失败后的逻辑 }); } } } </script> ``` 请注意,上述代码中的`your-access-key-id`、`your-access-key-secret`、`your-bucket-name`和`your-oss-region`需要替换为你自己的阿里云OSS相关信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值