尚籌網11阿里雲OSS物件儲存
阿新 • • 發佈:2020-07-25
阿里雲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 { privateString 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頁面