SpringBoot+阿⾥云OSS实现在线视频播放的⽰例阿⾥云 OSS 是⼀种云存储技术,你可以理解为云盘,我们的⽬标是将视频存储到云端,然后在前端读取并播放视频。
OSS
然后到读写权限:
将读写权限设置为公共读即可:
在 RAM 中新建⼀个⽤户:
为其添加权限,选择 OSS 的权限:
然后点进去这个⽤户,到 AccessKey:
创建之后记下来secret,因为他只出现⼀次,如果没记住也没事,可以重新创建新的key。下⾯开始编写服务端代码:
POM
<!-- 阿⾥云oss -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.10.2</version>
</dependency>
package com.ller.admin;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.del.AppendObjectRequest;
import com.del.AppendObjectResult;
import com.del.ObjectMetadata;
import com.del.PutObjectRequest;
import com.lsu.server.dto.FileDto;
import com.lsu.server.dto.ResponseDto;
import com.ums.FileUseEnum;
import com.lsu.server.service.FileService;
import com.lsu.server.util.Base64ToMultipartFile;
import com.lsu.server.util.UuidUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.ByteArrayInputStream;
/**
* @author wsuo
*/
@RestController
@RequestMapping("/admin")
public class OssController {
private static final Logger LOG = Logger(FileController.class);
@Value("${oss.accessKeyId}")spring教学视频
private String accessKeyId;
@Value("${oss.accessKeySecret}")
private String accessKeySecret;
@Value("${dpoint}")
private String endpoint;
@Value("${oss.bucket}")
private String bucket;
@Value("${oss.domain}")
private String ossDomain;
public static final String BUSINESS_NAME = "OSS⽂件上传";
@Resource
private FileService fileService;
@PostMapping("/oss-append")
public ResponseDto<FileDto> fileUpload(@RequestBody FileDto fileDto) throws Exception {
LOG.info("上传⽂件开始");
String use = Use();
String key = Key();
String suffix = Suffix();
Integer shardIndex = ShardIndex();
Integer shardSize = ShardSize();
String shardBase64 = Shard();
MultipartFile shard = Base64ToMultipartFile.base64ToMultipart(shardBase64);
FileUseEnum useEnum = ByCode(use);
String dir = useEnum.name().toLowerCase();
String path = dir +
"/" +
key +
"." +
suffix;
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
ObjectMetadata meta = new ObjectMetadata();
// 指定上传的内容类型。
meta.setContentType("text/plain");
// 通过AppendObjectRequest设置多个参数。
AppendObjectRequest appendObjectRequest = new AppendObjectRequest(bucket, path, new Bytes()), meta);
appendObjectRequest.setPosition((long) ((shardIndex - 1) * shardSize));
AppendObjectResult appendObjectResult = ossClient.appendObject(appendObjectRequest);
// ⽂件的64位CRC值。此值根据ECMA-182标准计算得出。
System.out.ObjectCRC());
System.out.JSONString(appendObjectResult));
ossClient.shutdown();
LOG.info("保存⽂件记录开始");
fileDto.setPath(path);
fileService.save(fileDto);
ResponseDto<FileDto> responseDto = new ResponseDto<>();
fileDto.setPath(ossDomain + path);
responseDto.setContent(fileDto);
return responseDto;
}
@PostMapping("/oss-simple")
public ResponseDto<FileDto> fileUpload(@RequestParam MultipartFile file, String use) throws Exception {
LOG.info("上传⽂件开始");
FileUseEnum useEnum = ByCode(use);
String key = ShortUuid();
String fileName = OriginalFilename();
String suffix = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
String dir = useEnum.name().toLowerCase();
String path = dir + "/" + key + "." + suffix;
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, path, new Bytes()));
ossClient.putObject(putObjectRequest);
ResponseDto<FileDto> responseDto = new ResponseDto<>();
FileDto fileDto = new FileDto();
fileDto.setPath(ossDomain + path);
responseDto.setContent(fileDto);
return responseDto;
}
}
上⾯写的是两个接⼝:
追加上传:/oss-append
简单上传:/oss-simple
注意这⾥的参数都已经在yml⽂件中定义了:
上⾯的 KeyId 和 KeySecret 就是之前在创建⽤户时给的那两个,填上就⾏了。
在前端我们就可以发送请求获取数据,注意这⾥的对象是我⾃定义的,⼤家可以根据项⽬需求⾃⾏设置。
_this.$ajax.v.VUE_APP_SERVER + '/file/admin/oss-simple', formData).then(response => {
Loading.hide();
let resp = response.data;
_this.afterUpload(resp);
// 清空原来控件中的值
$("#" + _this.inputId + "-input").val("");
})
视频点播
VOD 是另⼀种视频存储的形式,它的功能更丰。阿⾥云视频点播(VOD)是集⾳视频上传、⾃动化转码处理、媒体资源管理、分发加速于⼀体的全链路⾳视频点播服务。我们同样需要⼀个 VOD 的⽤户,给它赋予 VOD 的权限:
我们可以在转码组设置⾃⼰的模板,然后通过 ID 在代码中使⽤:
上传视频⽐较简单,和 OSS 很像,但是播放视频要多⼀个条件,在获取播放链接之前要先取得权限认证,所以下⾯单独写了⼀个/get-auth/{vod}接⼝,其中的参数就是 vod 的 ID,这个 ID 在我们上传视频之后会作为返回值返回的。
package com.ller.admin;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.oss.OSSClient;
import com.aliyuncs.DefaultAcsClient;
import com.del.v20170321.CreateUploadVideoResponse;
import com.del.v20170321.GetMezzanineInfoResponse;
import com.del.v20170321.GetVideoPlayAuthResponse;
import com.lsu.server.dto.FileDto;
import com.lsu.server.dto.ResponseDto;
import com.ums.FileUseEnum;
import com.lsu.server.service.FileService;
import com.lsu.server.util.Base64ToMultipartFile;
import com.lsu.server.util.VodUtil;
import dec.binary.Base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
/**
* @author wsuo
*/
@RestController
@RequestMapping("/admin")
public class VodController {
private static final Logger LOG = Logger(FileController.class);
@Value("${vod.accessKeyId}")
private String accessKeyId;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论