一、什么是对象存储OSS(注:官方解释)
详情请参考:OSS官网
对象存储OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务,可提供99.9999999999%(12个9)的数据持久性,99.995%的数据可用性。多种存储类型供选择,全面优化存储成本
OSS具有与平台无关的RESTful API接口,您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。
您可以使用阿里云提供的API、SDK接口或者OSS迁移工具轻松地将海量数据移入或移出阿里云OSS。数据存储到阿里云OSS以后,您可以选择标准存储(Standard)作为移动应用、大型网站、图片分享或热点音视频的主要存储方式,也可以选择成本更低、存储期限更长的低频访问存储(Infrequent Access)、归档存储(Archive)、冷归档存储(Cold Archive)作为不经常访问数据的存储方式。
计费方式
按量付费:所有计费项默认采用按量付费。按照各计费项的实际用量结算费用,先使用,后付费,适用于业务用量经常有变化的场景。更多信息,请参见按量付费。
资源包:针对部分常用计费项支持专用的资源包。预先购买针对不同的计费项推出的优惠资源包,在费用结算时,优先从资源包抵扣用量,先购买,后抵扣,适用于业务用量相对稳定的场景。更多信息,请参见资源包概述。
存储容量单位包SCU:针对存储费用支持SCU。SCU除了用于抵扣OSS的存储费用,还可用于抵扣多种云存储产品存储容量费用。更多信息,请参见存储容量单位包SCU。
二、图片上传至OSS存储服务
1.开通OSS服务
2.管理OSS
3.创建Bucket用于存储图片
4.获取Access Key
5. Java实现图片上传
pom文件引入依赖
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>version</version>
</dependency>
yml文件
server:
port: 7150
#spring
spring:
profiles:
active: prod
application:
name: oss
servlet:
multipart:
max-file-size: 10MB
max-request-size: 100MB
aliyun:
oss:
endpoint: 阿里云获取
key-id: 阿里云获取
key-secret: 阿里云获取
bucket-name: 创建的Bucket
OssProperties
@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class OssProperties implements InitializingBean{
private String endpoint;
private String keyId;
private String keySecret;
private String bucketName;
public static String ENDPOINT;
public static String KEY_ID;
public static String KEY_SECRET;
public static String BUCKET_NAME;
@Override
public void afterPropertiesSet() throws Exception {
ENDPOINT = endpoint;
KEY_ID = keyId;
KEY_SECRET = keySecret;
BUCKET_NAME = bucketName;
}
}
FileService
public interface FileService {
/**
* OSS图片上传
* @param inputStream 文件流
* @param module 单元
* @param fileName 文件名称
* @return
*/
String uploadALiYunOSS(InputStream inputStream, String module, String fileName);
}
FileServiceImpl
@Service
public class FileServiceImpl implements FileService {
@Override
public String uploadALiYunOSS(InputStream inputStream, String module, String fileName) {
OSS ossClient = new OSSClientBuilder().build(OssProperties.ENDPOINT, OssProperties.KEY_ID, OssProperties.KEY_SECRET);
if (!ossClient.doesBucketExist(OssProperties.BUCKET_NAME)) {
ossClient.createBucket(OssProperties.BUCKET_NAME);
ossClient.setBucketAcl(OssProperties.BUCKET_NAME, CannedAccessControlList.PublicRead);
}
String dateTime = new DateTime().toString("/yyyy/MM/dd/");
fileName = UUID.randomUUID().toString() + fileName.substring(fileName.lastIndexOf("."));
String file = module + dateTime + fileName;
ossClient.putObject(OssProperties.BUCKET_NAME, file, inputStream);
ossClient.shutdown();
return "https://" + OssProperties.BUCKET_NAME + "." + OssProperties.ENDPOINT + "/" + file;
}
}
FileController
@RestController
@CrossOrigin
@RequestMapping("/v1/oss/test_oss")
public class FileController {
@Resource
private FileService fileService;
@PostMapping("/upload")
public Result uploadALiYunOSS(@RequestParam("file") MultipartFile multipartFile, @RequestParam("module") String module) {
try {
InputStream inputStream = multipartFile.getInputStream();
String originalFilename = multipartFile.getOriginalFilename();
String routh = fileService.uploadALiYunOSS(inputStream, module, originalFilename);
return Result.ok().message("文件上传成功").data("url", routh);
} catch (Exception e) {
throw new BusinessException(ResponseEnum.UPLOAD_ERROR, e);
}
}
}
- 测试