提示:本文详细讲解了阿里云OSS的开通流程、配置方法以及在Java项目中的集成与使用。通过本文,你将掌握如何快速上手阿里云OSS,并在实际项目中实现文件的高效存储与管理。
目录
6.
前言
提示:
本文详细讲解了阿里云OSS的开通流程、配置方法以及在Java项目中的集成与使用。通过本文,你将掌握如何快速上手阿里云OSS,并在实际项目中实现文件的高效存储与管理。
在当今的互联网应用开发中,文件存储是一个至关重要的环节。阿里云对象存储OSS(Object Storage Service)凭借其高效、安全、可靠的特性,成为了众多开发者首选的存储解决方案。本文将带你一起探索阿里云OSS的开通、配置以及在Java项目中的应用。
一、阿里云OSS的注册与开通
-
进入阿里云官网:打开浏览器,输入网址:https://www.aliyun.com,进入阿里云官方网站。
-
登录账号:如果你已有阿里云账号,直接输入账号和密码登录;若没有,需先注册一个账号。
-
找到对象存储OSS:在官网导航栏中点击“产品”,在下拉菜单中找到“存储与CDN”,点击“对象存储OSS”。
-
立即开通:进入OSS产品页面,点击“立即开通”。新用户可选择免费试用,根据自身需求进行操作。
-
同意协议:点击使用后会弹出提示框,仔细阅读并同意相关协议,即可完成开通。新用户有试用期3个月
二、阿里云OSS的基本计费规则
点击使用后会弹出提示框,同意即可,试用的朋友可能需要认证
-
开通OSS服务以及创建Bucket操作是不收费的。
-
当你在Bucket中上传文件时,文件的存储空间是需要付费的,按实际使用量计费。
-
上传文件到Bucket产生的流量不收费。
-
若通过外网下载Bucket中的文件,外网出流量是需要付费的。
-
开通OSS传输加速功能不收费,但如果在传输过程中使用了加速功能,产生的传输加速流量是需要付费的。
三、OSS管理控制台的进入方式
开通服务后,有以下两种方式进入OSS管理控制台:
-
在OSS产品详情页面直接点击“管理控制台”,即可进入OSS管理控制台界面。
-
点击官网首页右上方菜单栏的“控制台”,进入阿里云管理控制台首页,再点击左侧的“对象存储OSS”菜单,进入OSS管理控制台界面。
四、存储空间(Bucket)的创建与配置
-
进入Bucket列表:在OSS管理控制台界面,点击左上角的栏目找到“Bucket列表”。
-
创建新的Bucket:点击“创建Bucket”,进入创建存储空间的页面。
-
配置存储空间信息:填写Bucket名称(需唯一且符合命名规则)、选择地域(根据用户访问量和数据存储需求选择合适的地域)、设置存储类型(如标准存储、低频访问存储等)、权限设置(可选择公共读写、公共只读或私有)等信息。
-
完成创建:点击“确定”完成Bucket的创建。
-
权限修改:为了方便后续项目访问,可根据需求对Bucket的权限进行调整。
五、文件的上传与管理
-
进入创建好的Bucket:在Bucket列表中点击刚创建的Bucket,进入其管理界面。
-
上传文件:点击“上传”,选择要上传的文件,可单个或批量上传。
-
查看文件信息:上传完成后,可在Bucket中看到上传的文件列表,点击文件可查看详细信息,包括文件名、大小、最后修改时间、存储路径等。
-
获取文件URL:点击文件的“图片详情信息”,可获取文件的访问URL,用于后续在项目中引用。
六、创建AccessKey
-
进入安全设置:登录阿里云账号,点击头像进入账号管理页面,找到“访问控制”选项。
-
创建AccessKey:在“访问控制”页面,找到“访问密钥”板块,点击“创建访问密钥”。
-
安全验证:勾选安全风险提示,点击“继续”,然后进行账号检查验证(可选择短信验证或密钥验证等方式)。
-
保存AccessKey:创建成功后,会显示AccessKey ID和AccessKey Secret,这是你的敏感信息,务必妥善保存,防止泄露。
七、Java项目中集成阿里云OSS
1. 添加依赖
在项目的pom.xml文件中添加阿里云OSS SDK依赖:
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.13.0</version>
</dependency>
2. 配置文件设置
在项目的application.yml或application.properties文件中添加阿里云OSS的相关配置:
sky:
alioss:
endpoint: oss-cn-beijing.aliyuncs.com # 根据实际创建的地域填写
access-key-id: your-access-key-id # 替换为你的AccessKey ID
access-key-secret: your-access-key-secret # 替换为你的AccessKey Secret
bucket-name: your-bucket-name # 替换为你的Bucket名称
spring:
profiles:
active: dev #设置环境
sky:
alioss:
endpoint: oss-cn-hangzhou.aliyuncs.com
access-key-id: LTAI5tPeFLzsPPT8gG3LPW64
access-key-secret: U6k1brOZ8gaOIXv3nXbulGTUzy6Pd7
bucket-name: sky-take-out
3. 创建配置类
创建AliOssProperties类,用于读取配置文件中的阿里云OSS相关属性:
package com.sky.properties;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "sky.alioss")
@Data
public class AliOssProperties {
private String endpoint;
private String accessKeyId;
private String accessKeySecret;
private String bucketName;
}
4. 创建工具类
创建AliOssUtil类,用于实现文件上传等功能:
package com.sky.utils;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import java.io.ByteArrayInputStream;
@Data
@AllArgsConstructor
@Slf4j
public class AliOssUtil {
private String endpoint;
private String accessKeyId;
private String accessKeySecret;
private String bucketName;
/**
* 文件上传
*
* @param bytes 文件字节数组
* @param objectName 文件在OSS中的存储名称
* @return 文件访问URL
*/
public String upload(byte[] bytes, String objectName) {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
try {
// 创建PutObject请求。
ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(bytes));
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
//构建文件访问路径
StringBuilder stringBuilder = new StringBuilder("https://");
stringBuilder
.append(bucketName)
.append(".")
.append(endpoint)
.append("/")
.append(objectName);
log.info("文件上传到:{}", stringBuilder.toString());
return stringBuilder.toString();
}
}
5. 创建配置类
创建OssConfiguration类,用于创建AliOssUtil Bean:
package com.sky.config;
import com.sky.properties.AliOssProperties;
import com.sky.utils.AliOssUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* 配置类,用于创建AliOSSUtil
*/
@Configuration
@Slf4j
public class OssConfiguration {
@Bean
@ConditionalOnMissingBean
public AliOssUtil aliOssUtil(AliOssProperties aliOssProperties) {
log.info("开始创建阿里云文件上传工具类:{}", aliOssProperties);
return new AliOssUtil(aliOssProperties.getEndpoint(),
aliOssProperties.getAccessKeyId(),
aliOssProperties.getAccessKeySecret(),
aliOssProperties.getBucketName());
}
}
6.定义接口
package com.sky.controller.admin;
import com.sky.constant.MessageConstant;
import com.sky.result.Result;
import com.sky.utils.AliOssUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.UUID;
/**
* 通用接口:其它模块也可能用到文件上传
*/
@RestController
@RequestMapping("/admin/common")
@Api(tags = "通用接口")
@Slf4j
public class CommonController {
@Autowired
private AliOssUtil aliOssUtil;
/**
* 文件上传
* @param file
* @return
*/
@PostMapping("/upload")
@ApiOperation("文件上传")
/**
* 为什么泛型指定为String类型???
* 由接口文档可知,返回的Result中data属性值是 文件上传到阿里云后的url地址 类型为String类型
*
* 通过MultipartFile 类型来接收上传的文件,要求方法的形参名和表单项的name属性的值/前端提交的参数名(
* 由接口文档可知参数名为file)一致,如果不一致使用@requesrparam注解进行参数绑定
*/
public Result<String> upload(MultipartFile file){
log.info("文件上传:{}",file);
try {
//原始文件名
String originalFilename = file.getOriginalFilename();
//截取原始文件名的后缀 dfdfdf.png
String extension = originalFilename.substring(originalFilename.lastIndexOf("."));
//构造新文件名称:防止上传到阿里云的文件,因为名字重复导致覆盖的问题
String objectName = UUID.randomUUID().toString() + extension;
//文件的请求路径
//参数: byte数组,文件对象转成的数组 传上去的图片在阿里云存储空间里面的名字
String filePath = aliOssUtil.upload(file.getBytes(), objectName);
return Result.success(filePath);
} catch (IOException e) {
log.error("文件上传失败:{}", e);
}
return Result.error(MessageConstant.UPLOAD_FAILED);
}
}
总结
本文详细学习了阿里云OSS的开通流程、配置方法以及在Java项目中的集成与使用。从注册账号、开通服务,到创建存储空间、上传文件,再到获取AccessKey并在Java项目中进行相关配置和代码实现,每一步都进行了清晰的讲解。在实际项目开发中,合理利用阿里云OSS能够有效解决文件存储问题,提高应用的性能和可靠性。希望本文能为你的开发工作提供有价值的参考,帮助你更好地运用阿里云OSS进行文件存储与管理。