Aliyun OSS
OSS 簡介
阿里雲物件儲存OSS(Object Storage Service)是阿里雲提供的海量、安全、低成本、高持久的雲端儲存服務。
OSS 基本概念
官方文件:點我傳送
- 儲存空間(Bucket)
- 物件(Object)
- ObjectKey
- Region(地域)
- Endpoint(訪問域名)
- AccessKey(訪問金鑰)
OSS 功能概述
官方文件:點我傳送
- 建立儲存空間
- 上傳檔案
- 簡單上傳: 包括流式上傳和檔案上傳。最大不能超過5GB。
- 表單上傳: 最大不能超過5GB。
- 追加上傳: 最大不能超過5GB。
- 斷點續傳上傳: 支援併發、斷點續傳、自定義分片大小。大檔案上傳推薦使用斷點續傳。最大不能超過48.8TB。
- 分片上傳: 當檔案較大時,可以使用分片上傳,最大不能超過48.8TB。
- 下載檔案
OSS 使用
使用步驟:
建立儲存空間Bucket
官方文件:點我傳送
建立子目錄
建立目錄,更好的區分圖片存放的位置。也可以直接放在建立的Bucket上。
Java編碼
- controller 層
/**
* 圖片上傳 Controller
*/
@RestController
@RequestMapping("/images")
public class ImagesController {
@PostMapping("/upload")
public void upload(@RequestParam("imageString") String imageString) throws UnsupportedEncodingException {
String list = seafoodService.upload(imageString);
}
}
- Service層
interface Service
/**
* 上傳圖片 service介面
*/
public interface ISeafoodService {
/**
* 圖片上傳
* @author Hosystem
* @create 2021-2-24
* @desc 圖片上傳
**/
String upload(String imageString) throws UnsupportedEncodingException;
}
ServiceImpl
/**
* 上傳圖片 service
*/
@Service
public class SeafoodServiceImpl implements ISeafoodService {
/**
* 阿里雲 OSS 配置抽取yml
*/
@Autowired
AliPayClientProperties aliPayClientProperties;
/**
* 圖片上傳
* @author HYH
* @create 2021-2-24
* @desc 圖片上傳 將圖片轉換成base64編碼然後傳進來
*
* 參考文件:https://help.aliyun.com/document_detail/84781.html?spm=a2c4g.11186623.2.10.e50c46a19Q1Q52
**/
@Override
public String upload(String imageString) {
// 建立OSSClient例項。
OSS ossClient = new OSSClientBuilder().build(appProps.getAliOssClientProperties().getEndpoint(), appProps.getAliOssClientProperties().getAccessKeyId(), appProps.getAliOssClientProperties().getAccessKeySecret());
// 建立一個Base64 物件
Base64 base64 = new Base64();
// 將傳進來的base64編碼 進行解碼
byte[] imageByte = base64.decode(imageString.toString());
// 建立位元組流 將base64解碼後進行位元組流轉換
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(imageByte);
// 上傳路徑 bucket目錄名 + 圖片的名稱 使用UUID隨機生成
// OSS管理控制檯將所有檔名以正斜線(/)結尾的檔案顯示為資料夾;
// 如:abc/efg/123.jpg這個路徑的檔案,在OSS管理控制檯上看起來就是123.jgp存放在abc資料夾下的efg子資料夾中。
// 若想上傳到bucket 則 String url = UUID.randomUUID().toString() + "." + "jpg";
String url = appProps.getAliOssClientProperties().getDirectoryPath() + UUID.randomUUID().toString() + "." + "jpg";
// 檔案元資訊(Object Meta):包括HTTP header和自定義元資訊
// 建立上傳檔案的元資訊,可以通過檔案元資訊設定HTTP header。
// 參考文件:https://help.aliyun.com/document_detail/84840.html
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentType("image/jpg");
// 上傳檔案
// 格式:ossClient.putObject("<yourBucketName>", "<yourObjectName>", new ByteArrayInputStream(content.getBytes()), meta);
ossClient.putObject(appProps.getAliOssClientProperties().getBucketName(), url, byteArrayInputStream, objectMetadata);
// 關閉OSSClient
ossClient.shutdown();
// 返回上傳圖片的OSS路徑
return appProps.getAliOssClientProperties().getUrl() + url;
}
}
- yml配置抽取
@Data
@Component
@Accessors(chain = true)
@ConfigurationProperties(prefix = "aliOssClientProperties")
public class AliOssClientProperties {
/**
* 阿里雲OSS endpoint
*/
private String endpoint;
/**
* 阿里雲OSS AccessKey
*/
private String accessKeyId;
/**
* 阿里雲OSS AccessKeySecret
*/
private String accessKeySecret;
/**
* 阿里雲OSS bucketName
*/
private String bucketName;
/**
* 阿里雲OSS url
*/
private String url;
/**
* 阿里雲OSS directoryPath 目錄路徑
*/
private String directoryPath;
}
- yml配置
# http://<bucket>.<endpoint>/<yourfile>+<yourdirectoryPath>
aliOssClientProperties:
endpoint: oss-cn-shenzhen.aliyuncs.com
accessKeyId: #accessKey
accessKeySecret: #accessKeySecret
bucketName: #bucketName
url: https://<bucketName>.<endpoint>
directoryPath: images/
測試
這裡我通過swagger進行測試,也可以通過postman進行測試,直接定義常量imageString 當作引數使用。
參考文件1:點我傳送
參考文件2:點我傳送
參考文件3:點我傳送