httpclient技術可以調用api地址http://vod.cn-shanghai.aliyunes.com/Action=GetPlayInfo&VideoId=1223
API: 阿里雲提供固定的地址,只需要調用這個固定的地址,向地址傳遞參數,實現功能。
SDK:sdk對api方式進行封裝,更方便使用,之前使用EasyExcel調用阿里雲提供類或者接口里面的方法實現視頻功能。
1.引入maven依賴
<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> </dependency> <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-vod</artifactId> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-sdk-vod-upload</artifactId> </dependency>
2.由於aliyun-java-vod-upload-1.4.9.jar還未正式開源,需要直接引入jar包到項目中,這個依賴不能直接在maven中央倉庫下載到,手動把依賴安裝到本地倉庫里面。使用maven命令進行安裝。 進入lib 目錄執行下面命令
mvn install:install-file -DgroupId=com.aliyun -DartifactId=aliyun-sdk-vod-upload -Dversion=1.4.11 -Dpackaging=jar -Dfile=aliyun-java-vod-upload-1.4.11.jar
3. application.properties
# 服務端口 server.port=8003 # 服務名 spring.application.name=service-vod # 環境設置:dev、test、prod spring.profiles.active=dev # nacos服務地址 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 #阿里雲 vod #不同的服務器,地址不同 aliyun.vod.file.keyid=LTAI4GDTqjJkxrB353q44ejE aliyun.vod.file.keysecret=rdy8GeTHEYeKOGrY1EJ8pKGdQodMSv # 最大上傳單個文件大小:默認1M spring.servlet.multipart.max-file-size=1024MB # 最大置總上傳的數據大小 :默認10M spring.servlet.multipart.max-request-size=1024MB
4.utils
@Component public class ConstantVodUtils implements InitializingBean { @Value("${aliyun.vod.file.keyid}") private String keyid; @Value("${aliyun.vod.file.keysecret}") private String keysecret; public static String ACCESS_KEY_SECRET; public static String ACCESS_KEY_ID; @Override public void afterPropertiesSet() throws Exception { ACCESS_KEY_ID = keyid; ACCESS_KEY_SECRET = keysecret; } }
public class InitVodCilent { public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException { String regionId = "cn-shanghai"; // 點播服務接入區域 DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret); DefaultAcsClient client = new DefaultAcsClient(profile); return client; } }
5.controller
@RestController @RequestMapping("/eduvod/video") @CrossOrigin public class VodController { @Autowired private VodService vodService; //上傳視頻到阿里雲 @PostMapping("uploadAlyiVideo") public R uploadAlyiVideo(MultipartFile file) { //返回上傳視頻id String videoId = vodService.uploadVideoAly(file); return R.ok().data("videoId",videoId); } //根據視頻id刪除阿里雲視頻 @DeleteMapping("removeAlyVideo/{id}") public R removeAlyVideo(@PathVariable String id) { try { //初始化對象 DefaultAcsClient client = InitVodCilent.initVodClient(ConstantVodUtils.ACCESS_KEY_ID, ConstantVodUtils.ACCESS_KEY_SECRET); //創建刪除視頻request對象 DeleteVideoRequest request = new DeleteVideoRequest(); //向request設置視頻id request.setVideoIds(id); //調用初始化對象的方法實現刪除 client.getAcsResponse(request); return R.ok(); }catch(Exception e) { e.printStackTrace(); throw new GuliException(20001,"刪除視頻失敗"); } } //刪除多個阿里雲視頻的方法 //參數多個視頻id List videoIdList @DeleteMapping("delete-batch") public R deleteBatch(@RequestParam("videoIdList") List<String> videoIdList) { vodService.removeMoreAlyVideo(videoIdList); return R.ok(); } }
6.service
@Service public class VodServiceImpl implements VodService { @Override public String uploadVideoAly(MultipartFile file) { try { //accessKeyId, accessKeySecret //fileName:上傳文件原始名稱 // 01.03.09.mp4 String fileName = file.getOriginalFilename(); //title:上傳之后顯示名稱 String title = fileName.substring(0, fileName.lastIndexOf(".")); //inputStream:上傳文件輸入流 InputStream inputStream = file.getInputStream(); UploadStreamRequest request = new UploadStreamRequest(ConstantVodUtils.ACCESS_KEY_ID,ConstantVodUtils.ACCESS_KEY_SECRET, title, fileName, inputStream); UploadVideoImpl uploader = new UploadVideoImpl(); UploadStreamResponse response = uploader.uploadStream(request); String videoId = null; if (response.isSuccess()) { videoId = response.getVideoId(); } else { //如果設置回調URL無效,不影響視頻上傳,可以返回VideoId同時會返回錯誤碼。其他情況上傳失敗時,VideoId為空,此時需要根據返回錯誤碼分析具體錯誤原因 videoId = response.getVideoId(); } return videoId; }catch(Exception e) { e.printStackTrace(); return null; } } @Override public void removeMoreAlyVideo(List videoIdList) { try { //初始化對象 DefaultAcsClient client = InitVodCilent.initVodClient(ConstantVodUtils.ACCESS_KEY_ID, ConstantVodUtils.ACCESS_KEY_SECRET); //創建刪除視頻request對象 DeleteVideoRequest request = new DeleteVideoRequest(); //videoIdList值轉換成 1,2,3 String videoIds = StringUtils.join(videoIdList.toArray(), ","); //向request設置視頻id request.setVideoIds(videoIds); //調用初始化對象的方法實現刪除 client.getAcsResponse(request); }catch(Exception e) { e.printStackTrace(); throw new GuliException(20001,"刪除視頻失敗"); } } public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("11"); list.add("22"); list.add("33"); // 11,22,33 String join = StringUtils.join(list.toArray(), ","); System.out.println(join); } }