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:點我傳送