學習穀粒學院物件儲存 --- logo上傳功能
阿新 • • 發佈:2022-05-31
物件儲存
#### 穀粒商城上傳logo
-
建立第三方服務模組
-
修改pom檔案
-
<?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>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.8</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.cui</groupId> <artifactId>gulimall-thirdparty</artifactId> <version>0.0.1-SNAPSHOT</version> <name>gulimall-thirdparty</name> <description>gulimall-thirdparty</description> <properties> <java.version>11</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>com.cui.gulimall-common</groupId> <artifactId>gulimall-common</artifactId> <version>0.0.1-SNAPSHOT</version> <exclusions> <exclusion> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> </exclusion> <exclusion> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-commons</artifactId> </exclusion> <exclusion> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-context</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> <version>3.1.2</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>aliyun-oss-spring-boot-starter</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2021.0.1.0</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>2021.0.2</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>aliyun-spring-boot-dependencies</artifactId> <version>1.0.0</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>
-
-
修改配置檔案
-
# nacos服務地址 spring.cloud.nacos.server-addr=192.168.215.137:8848 # 專案名 spring.application.name=thirdparty # 埠號 server.port=30000 # 修改路徑匹配規則 解決swagger衝突問題 spring.mvc.pathmatch.matching-strategy=ant_path_matcher
-
# 服務名 spring.application.name=thirdparty # nacos服務地址 spring.cloud.nacos.config.server-addr=192.168.215.137:8848 # 名稱空間 spring.cloud.nacos.config.namespace=d4100c2a-0991-4f7e-8e84-2db324678a0d # 配置檔案id spring.cloud.nacos.config.extension-configs[0].data-id=gulimall_thirdparty.properties # 開啟同步更新配置 spring.cloud.nacos.config.extension-configs[0].refresh=true #預設分組 spring.cloud.nacos.config.extension-configs[0].group=DEFAULT_GROUP
-
-
開啟服務發現
-
在nacos中配置相關屬性
-
建立名稱空間
-
建立配置檔案
-
在配置檔案中新增AK等資訊
alibaba.cloud.accessKey=LTAI5tKbSBpALoHC7JkBsF4g alibaba.cloud.secretKey=AkpjpwVSqtiwQFyA66e2UAghxn6xK9 alibaba.cloud.oss.endpoint=oss-cn-beijing.aliyuncs.com alibaba.cloud.bucket=exce-cui
-
-
建立介面
-
package com.cui.gulimallthirdparty.controller; import com.cui.gulimall.common.utils.Result; import com.cui.gulimallthirdparty.service.ObjectStorageService; import com.cui.gulimallthirdparty.service.impl.ObjectStorageServiceImpl; import io.swagger.annotations.Api; import org.checkerframework.checker.units.qual.A; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import java.util.Map; /** * @author 崔令雨 * @date 2022/5/31 9:09 * @Version 1.0 */ @RestController @Api("上傳檔案控制") @RequestMapping("thirdparty/oss") public class ObjectStorageController { private final ObjectStorageService objectStorageService; @Autowired public ObjectStorageController(ObjectStorageService objectStorageService) { this.objectStorageService = objectStorageService; } @PostMapping("upload") public Result<Map<String, String>> uploadFile() { Map<String, String> uploadToken = objectStorageService.upload(); return new Result<Map<String, String>>().ok(uploadToken); } }
-
-
service層
-
package com.cui.gulimallthirdparty.service.impl; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClient; import com.aliyun.oss.common.auth.Credentials; import com.aliyun.oss.common.auth.CredentialsProvider; import com.aliyun.oss.common.utils.BinaryUtil; import com.aliyun.oss.model.MatchMode; import com.aliyun.oss.model.PolicyConditions; import com.cui.gulimallthirdparty.service.ObjectStorageService; import org.checkerframework.checker.units.qual.A; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Service; import java.nio.charset.StandardCharsets; import java.time.LocalDate; import java.util.Date; import java.util.LinkedHashMap; import java.util.Map; /** * @author 崔令雨 * @date 2022/5/31 9:10 * @Version 1.0 */ @Service public class ObjectStorageServiceImpl implements ObjectStorageService { private final OSS client; @Autowired public ObjectStorageServiceImpl(OSS client) { this.client = client; } @Value("${alibaba.cloud.accessKey}") private String accessKey; @Value("${alibaba.cloud.secretKey}") private String secretKey; @Value("${alibaba.cloud.bucket}") private String bucket; @Value("${alibaba.cloud.oss.endpoint}") private String endpoint; @Override public Map<String, String> upload() { // 填寫Bucket名稱,例如examplebucket。 // 填寫Host地址,格式為https://bucketname.endpoint。 String host = "https://" + bucket + "." + endpoint; // 設定上傳回調URL,即回撥伺服器地址,用於處理應用伺服器與OSS之間的通訊。OSS會在檔案上傳完成後,把檔案上傳資訊通過此回撥URL傳送給應用伺服器。 String callbackUrl = "https://192.168.0.0:8888"; // 設定上傳到OSS檔案的字首,可置空此項。置空後,檔案將上傳至Bucket的根目錄下。 String dir = LocalDate.now().toString(); Map<String, String> respMap = null; try { long expireTime = 30; long expireEndTime = System.currentTimeMillis() + expireTime * 1000; Date expiration = new Date(expireEndTime); PolicyConditions policyConds = new PolicyConditions(); policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000); policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, dir); String postPolicy = client.generatePostPolicy(expiration, policyConds); byte[] binaryData = postPolicy.getBytes(StandardCharsets.UTF_8); String encodedPolicy = BinaryUtil.toBase64String(binaryData); String postSignature = client.calculatePostSignature(postPolicy); respMap = new LinkedHashMap<String, String>(); respMap.put("accessid", accessKey); respMap.put("policy", encodedPolicy); respMap.put("signature", postSignature); respMap.put("dir", dir); respMap.put("host", host); respMap.put("expire", String.valueOf(expireEndTime / 1000)); // respMap.put("expire", formatISO8601Date(expiration)); } catch (Exception e) { // Assert.fail(e.getMessage()); System.out.println(e.getMessage()); } return respMap; } }
-
-
前段程式碼
如果不雙向繫結圖片不回載入
需要匯入依賴才能開啟bootrap.properties==
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.1.2</version>
</dependency>
使用@ConfigurationProperties註解配置元資料需要匯入依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>