当前位置: 首页 > news >正文

若依框架集成阿里云OSS

OSS 集成


若依代码仓库

1. 问题分析

在若依框架目前的实现中,是把图片存储到了服务器本地的目录,通过服务进行访问,这样做存储的是比较省事,但是缺点也有很多:

  • 硬件与网络要求:服务器通常需要高性能的硬件和稳定的网络环境,以保证文件传输的效率和稳定性。这可能会增加硬件和网络资源的成本和维护难度。
  • 管理难度:服务器目录需要管理员进行配置和管理,包括权限设置、备份策略等。如果管理不善或配置不当,可能会引发一些安全问题和性能问题。
  • 性能瓶颈:如果服务器处理能力不足或网络带宽不够,可能会导致性能瓶颈,影响文件上传、下载和访问的速度。
  • 单点故障风险:服务器故障可能导致所有存储在其上的文件无法访问,尽管可以通过备份和冗余措施来降低这种风险,但单点故障的风险仍然存在。

基于以上原因,企业中很多的文件都会存储到 OSS 中,OSS 可以解决以上所有的问题,并且成本也不高,下面我们就把阿里的 OSS 集成到若依项目中。

2. 依赖导入

  1. 在父工程中引入依赖

    <properties>
      <aliyun.sdk.oss>3.17.4</aliyun.sdk.oss>
      <hutool-all.version>5.8.10</hutool-all.version>
    </properties>
    
    <!-- 依赖声明 -->
    <dependencyManagement>
      <dependencies>
        <!-- 其他依赖省略... -->
        <dependency>
          <groupId>com.aliyun.oss</groupId>
          <artifactId>aliyun-sdk-oss</artifactId>
          <version>${aliyun.sdk.oss}</version>
        </dependency>
        <!-- OSS 模块 -->
        <dependency>
          <groupId>com.zzyl</groupId>
          <artifactId>zzyl-oss</artifactId>
          <version>${zzyl.version}</version>
        </dependency>
        <!-- hutool工具包 -->
        <dependency>
          <groupId>cn.hutool</groupId>
          <artifactId>hutool-all</artifactId>
          <version>${hutool-all.version}</version>
        </dependency>
      </dependencies>
    </dependencyManagement>
    
  2. 在 zzyl-common 模块中导入依赖

    <!-- hutool工具包 -->
    <dependency>
      <groupId>cn.hutool</groupId>
      <artifactId>hutool-all</artifactId>
    </dependency>
    
  3. 在 zzyl-admin 模块中导入依赖

    <dependency>
      <groupId>com.zzyl</groupId>
      <artifactId>zzyl-oss</artifactId>
    </dependency>
    

在导入依赖操作时,不要着急依赖刷新,由于 OSS 模块并没有创建,肯定会报错!!!

3. 新建模块

创建新的子模块 zzyl-oss

  1. 删除如下内容,如果本来就没有,就不用操作

    <properties>
      <maven.compiler.source>17/11</maven.compiler.source>
      <maven.compiler.target>17/11</maven.compiler.target>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    
  2. 引入依赖

    <dependencies>
      <dependency>
        <groupId>com.aliyun.oss</groupId>
        <artifactId>aliyun-sdk-oss</artifactId>
      </dependency>
    
      <dependency>
        <groupId>com.zzyl</groupId>
        <artifactId>zzyl-common</artifactId>
      </dependency>
    </dependencies>
    

4. 创建 oss 配置类及客户端

在 OSS 模块中创建两个类:

  1. AliyunOSSProperties:配置类,读取 aliyun.oss 为前缀的属性值(桶名称,域名站点)
  2. AliyunOSSOperator:通过 OSSClient 对 OSS 进行交互,提供了上传删除两个方法

阿里云OSS模块,配置及文件上传/删除类

5. 修改 admin 模块中的配置文件

# 阿里云OSS相关配置
aliyun:
  oss:
    domain: YOUR_DOMAIN
    endpoint: YOUR_ENDPOINT
    bucket-name: YOUR_BUCKET_NAME
    region: YOUR_REGION
    accessKeyId: YOUR_ACCESS_KEY
    secretAccessKey: YOUR_SECRET_ACCESS_KEY

切记将数据切换为自己对应的参数

6. 后端代码修改

在 admin 模块中的 com.***.web.controller.common.CommonController 类,修改单个文件上传方法

//通用上传请求(单个)
@PostMapping("/upload")
public AjaxResult uploadFile(MultipartFile file) throws Exception {
  try {
     // 修改后的代码
    String url = aliyunOssUtils.uploadFile(file);

    AjaxResult ajax = AjaxResult.success();
    ajax.put("url", url);
    ajax.put("fileName", url);
    ajax.put("newFileName", FileUtils.getName(url));
    ajax.put("originalFilename", file.getOriginalFilename());
    return ajax;
  }
  catch (Exception e) { return AjaxResult.error(e.getMessage()); }
}

7. 前端代码修改

由于之前的图片访问是本地的路径和服务,需要向后端发起请求才能获取图片,现在我们使用了 OSS,图片可以直接通过互联网访问,无需再次访问后端服务,所以需要修改前端的图片访问逻辑

  • 修改文件位置:src/components/imageUpload/index.vue
  • 如果图片路径是以 http 开头的,则不走后台服务访问,直接访问 OSS,之前的不变
watch(() => props.modelValue, val => {
  if (val) {
    // 首先将值转为数组
    const list = Array.isArray(val) ? val : props.modelValue.split(",");
    // 然后将数组转为对象数组
    fileList.value = list.map(item => {
      if (typeof item === "string") {
        // 修改后的代码
        if (item.startsWith("http") === -1) {
          item = { name: baseUrl + item, url: baseUrl + item };
        } else {
          item = { name: item, url: item };
        }
      }
      return item;
    });
  } else {
    fileList.value = [];
    return [];
  }
},{ deep: true, immediate: true });

相关文章:

  • CentOS7最小化安装中使用curl安装yum和wget
  • Solr中得Core和Collection的作用和关系
  • 解决Moodo调节心情模块-大声喊出来无法测量出音频分贝
  • 怎么获取免费的 GPU 资源完成大语言模型(LLM)实验
  • P9231 [蓝桥杯 2023 省 A] 平方差--巧妙统计奇数的个数!
  • Java SE与Java EE
  • 【力扣】2620. 计数器——认识闭包
  • FreeRTOS(3)列表List
  • apache-maven-3.2.1
  • 从2D到3D:电商技术的飞跃,开启沉浸式购物之旅
  • 一个行为类似标准库find算法的模板
  • ARM 处理器平台 eMMC Flash 存储磨损测试示例
  • DeepSeek开源周,第三弹再次来袭,DeepGEMM
  • php 获取head参数
  • 小波变换背景预测matlab和python, pytorch样例
  • 《Operating System Concepts》阅读笔记:p147-p158
  • SkyWalking集成Kafka实现日志异步采集经验总结
  • Bsin-PaaS: 微前端设计
  • phpstudy安装教程dvwa靶场搭建教程
  • 掌握CSS弹性盒子:打造灵活且响应式的布局
  • 本地做的网站怎么放到网上去/aso推广
  • 公司网站平台/网站怎么快速收录
  • 百度推广需要什么条件/网站seo排名培训
  • 北京上地网站建设/亚马逊关键词搜索工具
  • 直播间 网站建设/网络营销的营销策略
  • 佛山微信网站推广多少钱/网站推广软件费用是多少