前言:我之前自己写文件上传功能的时候是直接上传到我本地的项目路径中。当部署到服务器上面的时候运行项目发现图片加载不出来(maven打成jar包运行以后不会加载图片的),调试了很久才解决。后面又想到自己租的服务器本来就很小,如果自己上传到服务器上会不会越来越卡....这个时候开始接触到阿里云的OSS和VOD了,我使用的感觉就是非常的简单,方便!
阿里云OSS 对象存储服务
对象存储 OSS 是一种海量、安全、低成本、高可靠的云存储服务。OSS 产品学习路径图指导您快速了解 OSS,学习相关的基础操作,并利用丰富的 API SDK 包和便捷工具进行二次开发。
1. 进入阿里云官网
2. 注册/登录 账号
注册账号推荐用支付宝注册,因为支付宝一般都是实名认证过的。
3. 在产品分类中找到OSS
4. 开通服务,进入管理控制台
要使用oss的话就要先创建一个bucket
5. 测试
点击我们创建的bucket,就可以进行上传文件的测试了!
用Java代码操作OSS
1. 准备工作
1.1 创建操作阿里云oss的许可证
个人中心
获取ID和秘钥
2. Java代码实现
2.1 配置文件中设置ID和秘钥和节点和bucket
# 因为这几个值比较固定,直接设置在配置文件中,到时候注入进去
aliyun.oss.file.endpoint=oss-cn-chengdu.aliyuncs.com
aliyun.oss.file.keyid=LTAI4GCBDADgvaC6SDFi3
aliyun.oss.file.keysecret=3T1HaLcmkBSDFSFEBHBgvUxiHOxtFM
#bucket可以在控制台创建,也可以使用java代码创建
aliyun.oss.file.bucketname=edu-online-avatars
2.2 创建一个工具类,用于加载这些值
@Component
public class ConstantsPropertiesUtils implements InitializingBean {
// 读取配置文件中的值
@Value("${aliyun.oss.file.endpoint}")
private String endpoint;
@Value("${aliyun.oss.file.keyid}")
private String keyId;
@Value("${aliyun.oss.file.keysecret}")
private String keySecret;
@Value("${aliyun.oss.file.bucketname}")
private String bucketName;
//定义公开静态常量
public static String END_POINT;
public static String KEY_ID;
public static String KEY_SECRET;
public static String BUCKET_NAME;
//该方法在此类完成创建以后会进行调用,这样就可以直接通过类名.属性名进行直接调用
@Override
public void afterPropertiesSet() throws Exception {
END_POINT = endpoint;
KEY_ID = keyId;
KEY_SECRET = keySecret;
BUCKET_NAME = bucketName;
}
}
3. 在业务层中进行使用
/**
* 实现Oss的文件上传
* @param file
* @return
*/
@Override
public String uploadFile(MultipartFile file) {
// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
String endpoint = ConstantsPropertiesUtils.END_POINT;
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = ConstantsPropertiesUtils.KEY_ID;
String accessKeySecret = ConstantsPropertiesUtils.KEY_SECRET;
String bucketName = ConstantsPropertiesUtils.BUCKET_NAME;
//获取上传文件的地址
String filename = file.getOriginalFilename();
//设置文件的名字为唯一值
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
filename = uuid+filename;
//把文件按照日期来进行分类
String datePath = MyUtil.dateFormat(new Date());
filename = datePath+"/"+filename;
try {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
InputStream inputStream = file.getInputStream();
// 填写Bucket名称和Object完整路径。Object完整路径中不能包含Bucket名称。
//第二个参数是文件名称
ossClient.putObject(bucketName, filename, inputStream);
// 关闭OSSClient。
ossClient.shutdown();
//返回文件上传的地址,需要自己手动拼接字符串
// https://edu-online-avatars.oss-cn-chengdu.aliyuncs.com/avatar/cc2.jpg
String url = "https://"+bucketName+"."+endpoint+"/"+filename;
return url;
}catch (Exception e){
e.printStackTrace();
return null;
}
}
阿里云Vod视频点播服务
视频点播(ApsaraVideo VoD,简称VoD)是集视频采集、编辑、上传、媒体资源管理、自动化转码处理(窄带高清™)、视频审核分析、分发加速于一体的一站式音视频点播解决方案。
1. 找到视频点播,选择开通
2. 进入控制台界面,即可上传音视频
3. 后台Java代码的操作
要操作视频点播必须先初始化一个Client对象
//ConstantVodUtils.KEY_ID 与上面oss类似,创建一个工具类,加载配置文件中的ID,秘钥等。
public class InitVodClient {
public static DefaultAcsClient initVodClient() throws ClientException {
String regionId = "cn-shanghai"; // 点播服务接入区域
DefaultProfile profile = DefaultProfile.getProfile(regionId, ConstantVodUtils.KEY_ID, ConstantVodUtils.KEY_SECRET);
DefaultAcsClient client = new DefaultAcsClient(profile);
return client;
}
}
3.1 上传视频的业务层代码
@Override
public String uploadVideo(MultipartFile file) {
try {
//设置文件名字
String fileName = file.getOriginalFilename();
//设置title (上传成功以后显示的名字)
String title = fileName.substring(0, fileName.lastIndexOf("."));
//设置inputstream
InputStream inputStream = file.getInputStream();
UploadStreamRequest request = new UploadStreamRequest(ConstantVodUtils.KEY_ID, ConstantVodUtils.KEY_SECRET, title, fileName, inputStream);
UploadVideoImpl uploader = new UploadVideoImpl();
UploadStreamResponse response = uploader.uploadStream(request);
if (response.isSuccess()) {
//上传成功
System.out.print("VideoId=" + response.getVideoId() + "\n");
return response.getVideoId();
} else { //如果设置回调URL无效,不影响视频上传,可以返回VideoId同时会返回错误码。其他情况上传失败时,VideoId为空,此时需要根据返回错误码分析具体错误原因
System.out.print("VideoId=" + response.getVideoId() + "\n");
System.out.print("ErrorCode=" + response.getCode() + "\n");
System.out.print("ErrorMessage=" + response.getMessage() + "\n");
return response.getVideoId();
}
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
3.2 删除阿里云视频的Java代码
/**
* 删除阿里云视频
* @param videoId
*/
@Override
public void removeVideo(String videoId) {
try {
//初始化client对象
DefaultAcsClient client = InitVodClient.initVodClient();
//创建request对象
DeleteVideoRequest request = new DeleteVideoRequest();
request.setVideoIds(videoId);
//调用初始化方法进行删除
client.getAcsResponse(request);
}catch (Exception e){
e.printStackTrace();
throw new MyException(20001,"删除视频失败!");
}
}
3.3 获取播放凭证的Java代码
@Override
public String getVideoAuth(String id) {
try {
//初始化
DefaultAcsClient client = InitVodClient.initVodClient();
//请求
GetVideoPlayAuthRequest request = new GetVideoPlayAuthRequest();
request.setVideoId(id);
//响应
GetVideoPlayAuthResponse response = client.getAcsResponse(request);
//得到播放凭证
String playAuth = response.getPlayAuth();
return playAuth;
}catch (Exception e){
throw new MyException(20001,"获取视频播放凭证异常");
}
}
这样我们就可以使用Java代码来进行基本操作了哟!