springboot+vue+elementui+阿里云oss上传文件

Posted Code_BinBin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot+vue+elementui+阿里云oss上传文件相关的知识,希望对你有一定的参考价值。

才做完课程设计没多久,本来打算早点写这一篇文章,但是由于太懒了,就拖延了好几天,今天没什么事情,就打算写下一篇关于文件上传我文章,希望可以帮助到大家

需要准备:

  • 配置好maven
  • 购买阿里云oss

第一步:导入指定的依赖

 <!-- aliyun-oos -->
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>2.8.3</version>
        </dependency>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.10</version>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>

第二步:配置好阿里云oss

找到oss

在这里插入图片描述

创建Bucket

在这里插入图片描述

修改OSS读写权限,如果不修改就无法访问,必须携带参数

在这里插入图片描述

新建路径

在这里插入图片描述

第三步:写好OSS工具类

由于我们是在springboot项目里面使用oss,所以我们需要新建一个util包

在这里插入图片描述

给OSSUtils类加上成员变量

    private String ENDPOIT=";
    private String ACCESSKeyID="";
    private String ACCESSKEYSECRET="";
    private String BUCKETName="你自己刚刚建的BUCKET";
    private String URLPrefix="";
    private SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");

ENDPOIT和URLPrefix,从左往右

在这里插入图片描述

ACCESSKeyID和ACCESSKEYSECRET

在这里插入图片描述

在这里我们新建ACCESSKeyID和ACCESSKEYSECRET,切记,ACCESSKEYSECRET要自己记下来,他只会生成一次

在这里插入图片描述

第四步:测试配置是否成功

在main函数里面调用这个方法

public static void main(String[] args) {
        OSSUtils ossUtils=new OSSUtils();
        ossUtils.getOSSClient();
    }
public OSSClient getOSSClient(){
        OSSClient ossClient=new OSSClient(ENDPOIT,ACCESSKeyID,ACCESSKEYSECRET);
        if (ossClient.doesBucketExist(BUCKETName)){
            System.out.println("存在");
        }else {
            System.out.println("不存在,去创建");
            CreateBucketRequest bucketRequest=new CreateBucketRequest(null);
            bucketRequest.setBucketName(BUCKETName);
            bucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
            ossClient.createBucket(bucketRequest);
            ossClient.shutdown();
        }

        return ossClient;
    }

在这里插入图片描述

第五步:写好上传文件的方法

 public String uploadDocument(MultipartFile multipartFile,String bussessType) throws IOException {

        OSSClient ossClient=this.getOSSClient();
        String ext=multipartFile.getOriginalFilename();
        ext=ext.substring(ext.lastIndexOf("."));
        String date=sdf.format(new Date());

        String uuid= UUID.randomUUID().toString().replace("-","");
        String filename=bussessType+"/"+date+"/"+uuid+ext;
        String url=null;
        ossClient.putObject(BUCKETName,filename,new ByteArrayInputStream(multipartFile.getBytes()));
        url=URLPrefix+"/"+filename;
        ossClient.shutdown();
        return url;
  

第六步:在Controller层写好上传文件时访问的路径

注意这里blogphoto是自己backet下的文件夹,你可以写别的,想写什么写什么

  @PostMapping("oss")
    @ResponseBody
    public Map<String,Object> oss(@RequestParam("file")MultipartFile multipartFile) throws IOException {

        Map<String,Object>map=new HashMap<>();
        System.out.println("===========================");
        System.out.println(multipartFile.getOriginalFilename());
        String url=ossUtils.uploadDocument(multipartFile,"blogphoto");
        //
        System.out.println(url);
        map.put("url",url);
        return map;

    }

第七步:写好前端代码

<template>
  <div>

    <el-upload
      class="avatar-uploader"
      action="您自己的访问路径"
      :show-file-list="false"
      :on-success="handleAvatarSuccess"
      :before-upload="beforeAvatarUpload">
      <img v-if="imageUrl" :src="imageUrl" class="avatar">
      <i v-else class="el-icon-plus avatar-uploader-icon"></i>
    </el-upload>

  </div>
</template>
<script>

    export default {
        name: "Level",
      data(){
          return{
            imageUrl: ''
          }
      },
      methods:{
        //文件上传成功
        handleAvatarSuccess(res, file) {
          this.$message.success("图片修改成功!")
          this.imageUrl = URL.createObjectURL(file.raw);
          alert(this.imageUrl)
        },
        //限制用户上传的图片格式和大小
        beforeAvatarUpload(file) {
          const isLt2M = file.size / 1024 / 1024 < 10;

          if (!isLt2M) {
            this.$message.error('上传头像图片大小不能超过 10MB!');
          }
          return isLt2M;
        }

      }
    }
</script>

<style scoped>
  .avatar-uploader .el-upload {
    border: 1px dashed #d9d9d9;
    border-radius: 6px;
    cursor: pointer;
    position: relative;
    overflow: hidden;
  }
  .avatar-uploader .el-upload:hover {
    border-color: #409EFF;
  }
  .avatar-uploader-icon {
    font-size: 28px;
    color: #8c939d;
    width: 178px;
    height: 178px;
    line-height: 178px;
    text-align: center;
  }
  .avatar {
    width: 178px;
    height: 178px;
    display: block;
  }
</style>

第八步:测试一下,成功

在这里插入图片描述

以上是关于springboot+vue+elementui+阿里云oss上传文件的主要内容,如果未能解决你的问题,请参考以下文章

Springboot + Vue + elementUI 文件上传

SpringBoot + Vue + ElementUI 实现后台管理系统模板

SpringBoot + Vue + ElementUI 实现后台管理系统模板

毕业设计SpringBoot+Vue+ElementUI商城系统讲解(有后台)

SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 前端篇:使用 vue-router 进行动态加载菜单

SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 前端篇:使用 vue-router 进行动态加载菜单