相关配置

# Error解决 ## maven依赖问题(出问题按照下面的拷贝) ```xml ?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.junjie.bitmall</groupId> <artifactId>bitmall</artifactId> <version>0.0.1-SNAPSHOT</version> <relativePath/> <!-- lookup parent from repository --> </parent> <artifactId>bitmall-thirdpart</artifactId> <name>bitmall-thirdpart</name> <description>bit商城-第三方插件</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>Greenwich.SR3</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alicloud-oss</artifactId> </dependency> <dependency> <groupId>com.junjie.bitmall</groupId> <artifactId>bitmall-common</artifactId> <exclusions> <exclusion> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> ``` ## 跨域问题 ![image.png](https://cos.easydoc.net/13568421/files/ljz1drnv.png) 这里存在两个跨域, 一是去获取签名的时候, 需要访问网关, 网关统一处理了跨域问题, 二是访问OSS, 需要在OSS配置相关的跨域选项 # 文件存储的方案 ![image.png](https://cos.easydoc.net/13568421/files/ljybtpjz.png) ### 普通大型单体应用的文件存储方案 > **在单体应用的前提下, 文件存储的方案非常简单, 直接存储到应用服务器本地的文件系统即可, 但是, 大型单体应用因为单体故障等原因, 注定被淘汰** ### 分布式应用的文件存储方案 > **如果分布式应用的文件存储和单体应用一样, 存储到应用主机的本地文件系统, 会产生数据不一致问题, 多台微服务服务器的本地文件系统不一样, 仅存储到一台下一次负载均衡数据极有可能丢失, 而全部都存储一份又很浪费磁盘空间(deprecated)** > **可以采取文件服务器的方案, 可以解决多个微服务之间数据不一致的问题!** ### 本地架构OR云存储? 本地架构存在的问题是, 搭建复杂, 维护成本高, 需要投入专门的人工, 增加成本, 前期费用高 **云存储即开即用, 无需维护, 按量收费, 非常好!** **** ### aliyun-OSS上传方式 #### 方式一: 传统上传 ![image.png](https://cos.easydoc.net/13568421/files/ljybub7f.png) > **流程: 用户将文件上传到应用服务器, 然后应用服务器获取这些文件的流, 转发到OSS中** **优点:** 数据非常的安全, OSS登录的账号和密码都存储到应用服务器中, 客户端没办法获取到这些隐私数据, 进而无法破坏OSS **缺点:** 上传文件往往需要占用非常大的带宽, 即如果应用服务器的带宽有限, 而且上传的流量很大, 会导致其他请求的响应时间很长, 用户体验极差, 而且如果处理不过来, 过多的流数据会导致**堆溢出** #### 方式二: 直接上传 > **流程: 用户直接将文件上传到OSS服务器** **优点:** 不会占用应用服务器的带宽, 用户体验更好 **缺点:** 发送数据的时候通常会携带账号密码信息, 很容易信息泄漏, 数据很危险 #### 方式三: 签名后直传 ![image.png](https://cos.easydoc.net/13568421/files/ljybuwdh.png) # 配置Aliyun-OSS ![image.png](https://cos.easydoc.net/13568421/files/ljybvm4v) ![image.png](https://cos.easydoc.net/13568421/files/ljybvrjd.png) **创建第三方模块** [配置教程](https://github.com/alibaba/aliyun-spring-boot/blob/master/aliyun-spring-boot-samples/aliyun-oss-spring-boot-sample/README-zh.md) **赋予权限** ![image.png](https://cos.easydoc.net/13568421/files/ljybwmqv.png) **测试上传功能** ```java package com.junjie.bitmall.thirdpart; import com.aliyun.oss.OSS; import lombok.SneakyThrows; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import java.io.FileInputStream; @RunWith(SpringRunner.class) @SpringBootTest public class BitmallThirdpartApplicationTests { @Autowired private OSS ossClient; @SneakyThrows @Test public void contextLoads() { FileInputStream fileInputStream = new FileInputStream("E:\\暂存\\bug.jpg"); ossClient.putObject("bitmall-oss", "bug.jpg", fileInputStream); ossClient.shutdown(); fileInputStream.close(); } } ```