springboot+vue实现oss文件存储

前提oss准备工作

  1. 进入阿里云官网:阿里云oss官网

  2. 注册
    在这里插入图片描述

  3. 搜OSS,点击“对象存储OSS”

  4. 第一次进入需要开通,直接点击立即开通,到右上角AccessKey管理中创建AccessKey,并且记住自己的accessKeyId和accessKeySecret,因为之后要用到,如果现在不记之后就会被隐藏
    在这里插入图片描述
    在这里插入图片描述

  5. 点击右上角进入自己账号主页,鼠标移到左上角三条杠会有侧边栏弹出,找到对象存储OSS,开通后,创建Bucket。名称和地域自己填写和选择,其他默认不变,读写权限为“公共读”,其余默认即可

在这里插入图片描述
在这里插入图片描述

添加依赖

阿里云的oss依赖

<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.15.1</version>
</dependency>

AliOSS工具类

package com.wedu.modules.tain.utils;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

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

/**
 * 阿里云 OSS 工具类
 */
@Data
@ConfigurationProperties(prefix = "aliyun3.oss")
@Component
public class AliOSSUtil {
    // 这些成员变量等会在配置项中设置
    private String endpoint;
    private String accessKeyId;
    private String accessKeySecret;
    private String bucketName;

    /**
     * 实现上传图片到OSS
     */
    public String upload(MultipartFile file) throws IOException {
        // 获取上传的文件的输入流
        InputStream inputStream = file.getInputStream();

        // 避免文件覆盖(一面文件重名时,上传失败)
        String originalFilename = file.getOriginalFilename();
        String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));

        //上传文件到 OSS
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        ossClient.putObject(bucketName, fileName, inputStream);

        //文件访问路径
        String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;
        // 关闭ossClient
        ossClient.shutdown();
        return url;// 把上传到oss的路径返回
    }

}

controller类:接收请求,返回文件路径

    @Autowired
    private AliOSSUtil aliOSSUtil;
    //oss
    @PostMapping("/ossUpload")
    public R ossUpload(MultipartFile file) throws IOException {
        String url = aliOSSUtil.upload(file);  // 返回文件的上传路径,访问这个url即可下载
        return R.ok().put("url",url);
    }

更新application.yml配置

# 阿里云OSS配置 wyj配置
aliyun3:
  oss:
    endpoint: http://见下文解说
    accessKeyId: 自己的KeyId
    accessKeySecret: 自己的KeySecret
    bucketName: 创建的bucket的名称

外网访问的那个东东复制在http:后面就行
在这里插入图片描述

postman测试

测试成功
在这里插入图片描述
列表里也有刚刚上传的数据
在这里插入图片描述

vue

首先在页面上写一个文件上传按钮,点击则弹出弹窗,弹窗内再继续写文件上传

<template>
    <div>
      <el-form :inline="true">
        <el-form-item>
          <el-button
            type="primary"
            @click="fileUpload()"
            >文件上传</el-button
          >
        </el-form-item>
      </el-form>
  
      <file-upload v-if="fileUploadVisible" ref="FileUpload"></file-upload>
    </div>
  </template>
  
  <script>
  import FileUpload from "./warn-file-upload";
  export default {
    data() {
      return {
        fileUploadVisible:false
      };
    },
    components: {
      FileUpload,
    },
    methods: {
      fileUpload(){
        this.fileUploadVisible = true;
          this.$nextTick(() => {
            this.$refs.FileUpload.init();
          });
      },
    },
  };
  </script>
  
  <style>
  </style>

弹窗内写一个下拉选择框,后续还会写本地存储以及minio

<template>
    <el-dialog
      title="文件传输"
      :visible.sync="visible"
      :close-on-click-modal="false"
    >
      <el-select v-model="value" placeholder="请选择存储方式">
        <el-option
          v-for="item in options"
          :key="item.value"
          :label="item.label"
          :value="item.value"
        >
        </el-option>
      </el-select>
      <el-upload
        class="upload-demo"
        drag
        :action="getUploadAction(this.value)"
        :headers="tokenInfo"
        multiple
        :disabled="!this.value"
      >
        <i class="el-icon-upload"></i>
        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
        <div class="el-upload__tip" slot="tip">
          请先选择上传方式再进行文件上传
        </div>
      </el-upload>
    </el-dialog>
  </template>
    
    <script>
  export default {
    data() {
      return {
        ossUpload: this.$http.adornUrl("/tain/warn/ossUpload"),
        tokenInfo: {
          token: this.$cookie.get("token"),
        },
        visible: true,
        options: [
          {
            value: "1",
            label: "本地存储",
          },
        ],
        value: "",
      };
    },
    methods: {
      init() {
        this.visible = true;
        this.$nextTick(() => {
          this.value = "";
        });
      },
      getUploadAction(value) {
        if (value == 1) {
          return this.ossUpload;
        } else if (value == "") {
          return this.value;
        }
      },
    },
  };
  </script>
    
    <style>
  </style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/416728.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用 Gradle 版本目录进行依赖管理 - Android

/ 前言 / 在软件开发中&#xff0c;依赖管理是一个至关重要的方面。合理的依赖版本控制有助于确保项目的稳定性、安全性和可维护性。 Gradle版本目录&#xff08;Version Catalogs&#xff09;是 Gradle 构建工具的一个强大功能&#xff0c;它为项目提供了一种集中管理依赖…

使用Python对数据进行rsa加密

#!/usr/bin/python3 import base64 import json import jsonpath import requests from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5 from base64 import b64decode, b64encodedef get_public_key():"""备注&#…

网络工程师笔记3

IP地址类型 A类 255.0.0.0B类 255.255.0.0C类 255.255.255.0D类 E类 子网掩码&#xff1a;从左到右连续的确定网络位 2-4-8-16-32-64-128-256 128 &#xff1a; 1000 0000 64 &#xff1a; 0100 0000 32 &#xff1a; 0010 0000 16 &#xff1a; 0001 0000 8 &am…

vue3 开发记录

1.引入nprogress插件&#xff0c;显示未声明文件 无法找到模块“nprogress”的声明文件。 解决方法&#xff1a; vite-env.d.ts // 解决引入模块的报错提示 declare module "nprogress";2.在 .evn 文件中创建了自定义环境变量 VITE_APP_BASE_URL 但在项目中使用时出…

【c语言】探索联合和枚举---解锁更多选择

前言 上一篇 讲解的是结构体相关知识&#xff0c;接着本篇主要讲解的是 联合和枚举 相关知识 结构体、联合体和枚举都属于 自定义类型。 那么接下来就跟上我的节奏&#xff0c;准备发车~ 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xf…

如何在群晖NAS中开启FTP服务并实现公网环境访问内网服务

文章目录 1. 群晖安装Cpolar2. 创建FTP公网地址3. 开启群晖FTP服务4. 群晖FTP远程连接5. 固定FTP公网地址6. 固定FTP地址连接 本文主要介绍如何在群晖NAS中开启FTP服务并结合cpolar内网穿透工具&#xff0c;实现使用固定公网地址远程访问群晖FTP服务实现文件上传下载。 Cpolar内…

同局域网共享虚拟机(VMware)

一、前言 首先我们先来了解下 VMware 的三种网络模式桥接模式、NAT模式、仅主机模式&#xff0c;网络类型介绍详情可以参考下我之前的文档 Linux系统虚拟机安装&#xff08;上&#xff09;第三章 - 第9步指定网络类型。了解三种网络模式的原理之后&#xff0c;再来剖析下需求&…

Python进阶学习:axis=0和axis=1的区别和用法

Python进阶学习&#xff1a;axis0和axis1的区别和用法 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望得到您的订阅和…

Python is not set from command line or npm configuration 报错解决

问题 在 npm install 的过程中提示 Python is not set from command line or npm configuration 的报错&#xff0c;相信不少朋友都遇到过&#xff0c;出现这个问题的原因是缺少 python 环境所导致的。 解决方法 1、安装 python 官网&#xff1a;https://www.python.org/dow…

Halcon 求孔洞的大小和数量

文章目录 适用场景汽车按钮案例 适用场景 在工业中可以利用孔洞的多少和孔洞的大小来分析出产品的缺陷问题&#xff0c;例如一个产品有8个孔洞&#xff0c;孔洞多和少都会被识别为不合格产品&#xff0c;或者求出孔洞的面积&#xff0c;如果孔洞的大小超出一定的范围将视为不合…

第十四课 PCB保姆级规则设置(三)

1.SMT&#xff1a;贴片规则&#xff0c;默认设置 2.Mask阻焊&#xff1a;绿油阻焊外扩&#xff08;4mil&#xff09;&#xff0c;助焊0mil 3.器件之间的距离 1&#xff09;有丝印的话&#xff0c;根据空间和整体调节&#xff0c;丝印不冲突就可以 2&#xff09;没有丝印&…

C++惯用法之空基类优化

相关系列文章 C惯用法之Pimpl C惯用法之CRTP(奇异递归模板模式) C之std::tuple(二) : 揭秘底层实现原理 目录 1.空类 2.空基类优化 3.内存布局原则 4.实例分析 5.总结 1.空类 C 中每个对象的实例都可以通过取地址运算符获取其在内存布局中的开始位置&#xff0c;因此每个类…

【亚马逊云科技】通过Amazon CloudFront(CDN)快速访问资源

文章目录 前言一、应用场景二、【亚马逊云科技】CloudFront&#xff08;CDN&#xff09;的优势三、入门使用总结 前言 前面有篇文章我们介绍了亚马逊云科技的云存储服务。云存储服务主要用于托管资源&#xff0c;而本篇文章要介绍的CDN则是一种对托管资源的快速访问服务&#…

18个惊艳的可视化大屏(第九辑):智慧旅游和智慧景区

本次带来18个页面是智慧旅游和智慧景区的作品分享&#xff0c;希望大家能从作品中寻找到灵感 &#xff0c;创造更新的应用。 数字孪生技术可以为智慧旅游/智慧景区提供数字化模型和数据支持&#xff0c;帮助景区管理者更好地了解景区的运营情况和游客需求&#xff0c;从而提供更…

为什么企业需要使用云电子邮箱?

作为一家机构的负责人&#xff0c;您比大多数人都清楚&#xff0c;您的工作日不会在下午5点就结束。很可能&#xff0c;当您的员工已经打卡下班回家很久之后&#xff0c;您还在以这样或那样的方式继续工作。作为一名企业主&#xff0c;埋头苦干对您来说并不是什么新鲜事&#x…

分巧克力(蓝桥杯)

文章目录 分巧克力题目描述二分算法 分巧克力 题目描述 儿童节那天有 K位小朋友到小明家做客。 小明拿出了珍藏的巧克力招待小朋友们。 小明一共有 N块巧克力&#xff0c;其中第 i 块是 HiWi 的方格组成的长方形。 为了公平起见&#xff0c;小明需要从这 N 块巧克力中切出 K …

sawForceDimensionSDK安装,sigma7+ros

force dimension的sdk中没有关于ros&#xff0c;借助开源的sawForceDimensionSDK实现对于数据的封装和可视化&#xff0c;方便后续使用 链接&#xff1a; GitHub - jhu-saw/sawForceDimensionSDK 具体步骤&#xff1a; 安装qt和ros&#xff0c;官网下载Force Dimension SDK …

微信小程序 uniapp+vue实习助学岗位系统springboot/php/python/nodejs

&#xff08;一&#xff09;研究目标&#xff1a; 对于本微信小程序实习系统的设计来讲&#xff0c;主要是采用了java语言和mysql数据库来完成对系统的设计&#xff0c;根据某高校的实习系统&#xff0c;提出解决问题的一个可行性方法&#xff0c;可以在手机端就能完成我们的工…

对话式人工智能:改变电子学习的格局

革命性教育体验&#xff1a;对话式AI导师如何改变学习方式 对话式人工智能和电子学习的融合不仅仅是技术进步&#xff0c;更是技术进步。 这是教育范式的一场革命。 这种整合正在重塑我们的学习方式&#xff0c;打破传统障碍&#xff0c;创造更具互动性、个性化且易于访问的学习…

科普SCADA系统

什么是SCADA系统&#xff1f; 在20世纪中期&#xff0c;工业设施依靠人员对设备进行物理控制和监控。然而&#xff0c;随着行业规模的扩大&#xff0c;设备控制的创新出现了。20世纪70年代初&#xff0c;监控与数据采集&#xff08;SCADA&#xff09;系统被发明。该系统允许自…