1. 程式人生 > 實用技巧 >尚籌網11阿里雲OSS物件儲存

尚籌網11阿里雲OSS物件儲存

阿里雲OSS物件儲存參考文章

將OSS引入專案

思路

準備OSSProperties

package com.adom.crowd.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class OSSProperties {
    private
String endPoint; private String bucketName; private String accessKeyId; private String accessKeySecret; private String bucketDomain; public OSSProperties() { } public OSSProperties(String endPoint, String bucketName, String accessKeyId, String accessKeySecret, String bucketDomain) {
this.endPoint = endPoint; this.bucketName = bucketName; this.accessKeyId = accessKeyId; this.accessKeySecret = accessKeySecret; this.bucketDomain = bucketDomain; }

編寫配置檔案

server:
  port: 5000
spring:
  application:
    name: adom-crowd-project
eureka:
  client:
    service
-url: http://localhost:1000/eureka aliyun: oss: access-key-id: 自行獲取 access-key-secret: 自行獲取 bucket-domain: 自行獲取 bucket-name:自行獲取 end-point: 自行獲取

工具方法

匯入依賴

<!-- OSS 客戶端 SDK -->
<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.5.0</version>
</dependency>

編寫工具方法

/*** 專門負責上傳檔案到 OSS 伺服器的工具方法
 * @param endpoint OSS 引數
 * @param accessKeyId OSS 引數
 * @param accessKeySecret OSS 引數
 * @param inputStream 要上傳的檔案的輸入流
 * @param bucketName OSS 引數
 * @param bucketDomain OSS 引數
 * @param originalName 要上傳的檔案的原始檔名
 * @return 包含上傳結果以及上傳的檔案在 OSS 上的訪問路徑 */
public static ResultEntity<String> uploadFileToOss(
        String endpoint,
        String accessKeyId,
        String accessKeySecret,
        InputStream inputStream,
        String bucketName,
        String bucketDomain,
        String originalName) {
    // 建立 OSSClient 例項。
    OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    // 生成上傳檔案的目錄
    String folderName = new SimpleDateFormat("yyyyMMdd").format(new Date());
    // 生成上傳檔案在 OSS 伺服器上儲存時的檔名
    // 原始檔名:beautfulgirl.jpg
    // 生成檔名:wer234234efwer235346457dfswet346235.jpg
    // 使用 UUID 生成檔案主體名稱
    String fileMainName = UUID.randomUUID().toString().replace("-", "");
    // 從原始檔名中獲取副檔名
    String extensionName = originalName.substring(originalName.lastIndexOf("."));
    // 使用目錄、檔案主體名稱、副檔名稱拼接得到物件名稱
    String objectName = folderName + "/" + fileMainName + extensionName;
    try {
        // 呼叫 OSS 客戶端物件的方法上傳檔案並獲取響應結果資料
        PutObjectResult putObjectResult = ossClient.putObject(bucketName, objectName, inputStream);
        // 從響應結果中獲取具體響應訊息
        ResponseMessage responseMessage = putObjectResult.getResponse();
        // 根據響應狀態碼判斷請求是否成功
        if (responseMessage == null) {
            // 拼接訪問剛剛上傳的檔案的路徑
            String ossFileAccessPath = bucketDomain + "/" + objectName;
            // 當前方法返回成功
            return ResultEntity.sucessWithData(ossFileAccessPath);
        } else {
            // 獲取響應狀態碼
            int statusCode = responseMessage.getStatusCode();
            // 如果請求沒有成功,獲取錯誤訊息
            String errorMessage = responseMessage.getErrorResponseAsString();
            // 當前方法返回失敗
            return ResultEntity.failed(" 當 前 響 應 狀 態 碼 =" + statusCode + " 錯 誤 消 息 =" + errorMessage);
        }
    } catch (Exception e) {
        e.printStackTrace();
        // 當前方法返回失敗
        return ResultEntity.failed(e.getMessage());
    } finally {
        if (ossClient != null) {
            // 關閉
            ossClient.shutdown();
        }
    }
}

今後專案中重定向問題

描述問題:

如:

http://localhost:4000

http://localhost:80

由於兩個埠號不同,因此不是相同的網站,瀏覽器工作時不會使用相同的Cookie

解決問題

以後重定向的地址都按照Zuul訪問的方式寫地址

return "redirect:http://www.crowd.com/auth/member/to/login/page";

預設路由到auth

Zuul需要依賴entity工程

問題描述

通過zuul訪問所有工程,在成功登陸之後,要前往會員中心頁面.

這時,zuulFilter中需要從session域讀取MemberLoginVO物件.SpringSession會從Redis中載入相關資訊.

相關資訊中包含了MemberLoginVO的全類名

需要根據這個全類名找到MemberLoginVO,用來反序列化.

可是我們之前沒有讓Zuul工程依賴entity工程,所以找不到MemberLoginVO.因此找不到類.

解決問題

Zuul工程依賴entity工程

<dependency>
    <groupId>com.adom</groupId>
    <artifactId>member-entity</artifactId>
    <version>1.0.0-SNAPSHOT</version>
</dependency>

從個人中心跳轉到發起專案的表單頁面

第一步點選我的眾籌

<a th:href="@{/member/my/crowd}">我的眾籌</a><span class="badge"><i class="glyphicon glyphicon-chevron-right"></i></span>

registry.addViewController("/member/my/crowd").setViewName("member-crowd");

準備member-crowd.html頁面