前言
实现代码
| mvn install:install-file -Dfile=aliyun-java-vod-upload-1.4.14.jar -DgroupId=com.aliyun -DartifactId=aliyun-sdk-vod-upload -Dversion=1.4.14 -Dpackaging=jar |
| |
| <dependency> |
| <groupId>com.aliyun</groupId> |
| <artifactId>aliyun-sdk-vod-upload</artifactId> |
| <version>1.4.11</version> |
| </dependency> |
| |
| |
| mvn install:install-file -Dfile="jar包的绝对路径" -DgroupId=groupid名 -DartifactId=artifactId名 -Dversion=jar版本 -Dpackaging="文件打包方式" |
| |
| |


| <dependencies> |
| <dependency> |
| <groupId>com.aliyun</groupId> |
| <artifactId>aliyun-java-sdk-core</artifactId> |
| <version>4.5.1</version> |
| </dependency> |
| <dependency> |
| <groupId>com.aliyun.oss</groupId> |
| <artifactId>aliyun-sdk-oss</artifactId> |
| <version>3.10.2</version> |
| </dependency> |
| <dependency> |
| <groupId>com.aliyun</groupId> |
| <artifactId>aliyun-java-sdk-vod</artifactId> |
| <version>2.15.11</version> |
| </dependency> |
| <dependency> |
| <groupId>com.alibaba</groupId> |
| <artifactId>fastjson</artifactId> |
| <version>1.2.28</version> |
| </dependency> |
| <dependency> |
| <groupId>org.json</groupId> |
| <artifactId>json</artifactId> |
| <version>20170516</version> |
| </dependency> |
| <dependency> |
| <groupId>com.google.code.gson</groupId> |
| <artifactId>gson</artifactId> |
| <version>2.8.2</version> |
| </dependency> |
| <dependency> |
| <groupId>com.aliyun</groupId> |
| <artifactId>aliyun-sdk-vod-upload</artifactId> |
| <version>1.4.11</version> |
| </dependency> |
| |
| <dependency> |
| <groupId>joda-time</groupId> |
| <artifactId>joda-time</artifactId> |
| <version>2.10.10</version> |
| </dependency> |
| |
| <dependency> |
| <groupId>org.springframework.boot</groupId> |
| <artifactId>spring-boot-starter-web</artifactId> |
| <version>2.6.1</version> |
| </dependency> |
| |
| <dependency> |
| <groupId>org.projectlombok</groupId> |
| <artifactId>lombok</artifactId> |
| <version>1.18.20</version> |
| <scope>provided</scope> |
| </dependency> |
| |
| <dependency> |
| <groupId>org.springframework.boot</groupId> |
| <artifactId>spring-boot-starter-test</artifactId> |
| <version>2.6.1</version> |
| <scope>test</scope> |
| </dependency> |
| </dependencies> |
| |
| server.port=8003 |
| |
| spring.application.name=service-vod |
| |
| |
| aliyun.vod.file.keyid=LTAI5trEnbqdU69Pd9cge8uc61de2A |
| aliyun.vod.file.keysecret=WoR326ScwdHY345s44zO3jgKg2N5zXs8RGK |
| |
| spring.servlet.multipart.max-file-size=1024MB |
| |
| spring.servlet.multipart.max-request-size=1024MB |
| @SpringBootApplication |
| @ComponentScan(basePackages={"com.ychen"}) |
| public class Demo02Application { |
| |
| public static void main(String[] args) { |
| SpringApplication.run(Demo02Application.class, args); |
| } |
| |
| } |
| import org.springframework.beans.factory.InitializingBean; |
| import org.springframework.beans.factory.annotation.Value; |
| import org.springframework.stereotype.Component; |
| |
| @Component |
| public class ConstantPropertiesUtil implements InitializingBean { |
| |
| @Value("${aliyun.vod.file.keyid}") |
| private String keyId; |
| |
| @Value("${aliyun.vod.file.keysecret}") |
| private String keySecret; |
| |
| public static String ACCESS_KEY_ID; |
| public static String ACCESS_KEY_SECRET; |
| |
| @Override |
| public void afterPropertiesSet() throws Exception { |
| ACCESS_KEY_ID = keyId; |
| ACCESS_KEY_SECRET = keySecret; |
| } |
| |
| } |
| import com.aliyuncs.DefaultAcsClient; |
| import com.aliyuncs.exceptions.ClientException; |
| import com.aliyuncs.profile.DefaultProfile; |
| |
| public class AliyunVodSDKUtils { |
| |
| 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; |
| } |
| |
| } |
| public interface VodService { |
| |
| String uploadVideo(MultipartFile file); |
| |
| void removeVideo(String videoId); |
| |
| } |
| import com.aliyun.vod.upload.impl.UploadVideoImpl; |
| import com.aliyun.vod.upload.req.UploadStreamRequest; |
| import com.aliyun.vod.upload.resp.UploadStreamResponse; |
| import com.aliyuncs.DefaultAcsClient; |
| import com.aliyuncs.exceptions.ClientException; |
| import com.aliyuncs.utils.StringUtils; |
| import com.aliyuncs.vod.model.v20170321.DeleteVideoRequest; |
| import com.aliyuncs.vod.model.v20170321.DeleteVideoResponse; |
| import com.ychen.vod.util.AliyunVodSDKUtils; |
| import com.ychen.vod.util.ConstantPropertiesUtil; |
| import org.springframework.stereotype.Service; |
| import org.springframework.web.multipart.MultipartFile; |
| import java.io.IOException; |
| import java.io.InputStream; |
| |
| @Service |
| public class VideoServiceImpl implements VodService { |
| |
| @Override |
| public String uploadVideo(MultipartFile file) { |
| try { |
| InputStream inputStream = file.getInputStream(); |
| String originalFilename = file.getOriginalFilename(); |
| String title = originalFilename.substring(0, originalFilename.lastIndexOf(".")); |
| UploadStreamRequest request = new UploadStreamRequest( |
| ConstantPropertiesUtil.ACCESS_KEY_ID, |
| ConstantPropertiesUtil.ACCESS_KEY_SECRET, |
| title, originalFilename, inputStream); |
| UploadVideoImpl uploader = new UploadVideoImpl(); |
| UploadStreamResponse response = uploader.uploadStream(request); |
| |
| |
| String videoId = response.getVideoId(); |
| if (!response.isSuccess()) { |
| String errorMessage = "阿里云上传错误:" + "code:" + response.getCode() + ", message:" + response.getMessage(); |
| if(StringUtils.isEmpty(videoId)){ |
| System.out.println("错误"); |
| |
| } |
| } |
| return videoId; |
| } catch (IOException e) { |
| System.out.println("错误"); |
| |
| } |
| return null; |
| } |
| |
| @Override |
| public void removeVideo(String videoId) { |
| try{ |
| DefaultAcsClient client = AliyunVodSDKUtils.initVodClient("LTAI5tEnsbqU69Pdd9ce8u61e2A", "WoR26ScwdHY34s5s4zOe3jegK2Nd5zwX8RGK"); |
| DeleteVideoRequest request = new DeleteVideoRequest(); |
| request.setVideoIds(videoId); |
| DeleteVideoResponse response = client.getAcsResponse(request); |
| System.out.print("RequestId = " + response.getRequestId() + "\n"); |
| }catch (ClientException e){ |
| System.out.println("错误"); |
| |
| } |
| } |
| |
| } |
| import com.aliyuncs.DefaultAcsClient; |
| import com.aliyuncs.vod.model.v20170321.GetPlayInfoRequest; |
| import com.aliyuncs.vod.model.v20170321.GetPlayInfoResponse; |
| import com.aliyuncs.vod.model.v20170321.GetVideoPlayAuthRequest; |
| import com.aliyuncs.vod.model.v20170321.GetVideoPlayAuthResponse; |
| import com.ychen.vod.service.VodService; |
| import com.ychen.vod.util.AliyunVodSDKUtils; |
| import org.springframework.beans.factory.annotation.Autowired; |
| import org.springframework.web.bind.annotation.*; |
| import org.springframework.web.multipart.MultipartFile; |
| import java.util.List; |
| |
| @RestController |
| public class VodController { |
| |
| @Autowired |
| private VodService videoService; |
| |
| |
| |
| |
| |
| |
| |
| @PostMapping("upload") |
| public String uploadVideo( |
| @RequestParam("file") MultipartFile file) throws Exception { |
| String videoId = videoService.uploadVideo(file); |
| return videoId; |
| } |
| |
| |
| |
| |
| @GetMapping("testGetVideoPlayAuth") |
| public String testGetVideoPlayAuth() throws Exception { |
| |
| DefaultAcsClient client = AliyunVodSDKUtils.initVodClient("LTAI5tEnsbqU69Pdd9ce8u61e2A", "WoR26ScwdHY34s5s4zOe3jegK2Nd5zwX8RGK"); |
| GetVideoPlayAuthRequest request = new GetVideoPlayAuthRequest(); |
| GetVideoPlayAuthResponse response = new GetVideoPlayAuthResponse(); |
| try { |
| |
| request.setVideoId("1632ec0f8d524412bb81c43caaa085b0"); |
| |
| response = client.getAcsResponse(request); |
| |
| |
| System.out.print("PlayAuth = " + response.getPlayAuth() + "\n"); |
| |
| System.out.print("VideoMeta.Title = " + response.getVideoMeta().getTitle() + "\n"); |
| } catch (Exception e) { |
| System.out.print("ErrorMessage = " + e.getLocalizedMessage()); |
| } |
| System.out.print("RequestId = " + response.getRequestId() + "\n"); |
| return "success"; |
| } |
| |
| |
| |
| |
| |
| |
| @GetMapping("testGetPlayInfo") |
| public String testGetPlayInfo() throws Exception { |
| |
| DefaultAcsClient client = AliyunVodSDKUtils.initVodClient("LTAI5tEnsbqU69Pdd9ce8u61e2A", "WoR26ScwdHY34s5s4zOe3jegK2Nd5zwX8RGK"); |
| GetPlayInfoRequest request = new GetPlayInfoRequest(); |
| GetPlayInfoResponse response = new GetPlayInfoResponse(); |
| try { |
| |
| |
| request.setVideoId("1632ec0f8d524412bb81c43caaa085b0"); |
| |
| response = client.getAcsResponse(request); |
| |
| List<GetPlayInfoResponse.PlayInfo> playInfoList = response.getPlayInfoList(); |
| |
| for (GetPlayInfoResponse.PlayInfo playInfo : playInfoList) { |
| System.out.print("PlayInfo.PlayURL = " + playInfo.getPlayURL() + "\n"); |
| } |
| |
| System.out.print("VideoBase.Title = " + response.getVideoBase().getTitle() + "\n"); |
| |
| } catch (Exception e) { |
| System.out.print("ErrorMessage = " + e.getLocalizedMessage()); |
| } |
| System.out.print("RequestId = " + response.getRequestId() + "\n"); |
| return "success"; |
| } |
| |
| @DeleteMapping("{videoId}") |
| public String removeVideo(@PathVariable String videoId){ |
| videoService.removeVideo(videoId); |
| return "success"; |
| } |
| |
| } |
| |
| PlayAuth = eyJTZWN1cml0eVRva2VuIjoiQ0FJU2h3TjFxNkZ0NUIyeWZTaklyNWJOUGYySG81Vlk4NFN0Um1ydzFVTVlPZTBVMTdiTWtUejJJSGxQZTNGaEFPb2V2L2svbVc5VTdmb2Nsck1xRnM4Vkh4Q2RNSmN0c2NrSnFGbi9KcExGc3QySjZyOEpqc1U0aEpZZzRFYXBzdlhKYXNEVkVmbDJFNVhFTWlJUi8wMGU2TC8rY2lyWXBUWEhWYlNDbFo5Z2FQa09Rd0M4ZGtBb0xkeEtKd3hrMnQxNFVtWFdPYVNDUHdMU2htUEJMVXhtdldnR2wyUnp1NHV5M3ZPZDVoZlpwMXI4eE80YXhlTDBQb1AyVjgxbExacGxlc3FwM0k0U2M3YmFnaFpVNGdscjhxbHg3c3BCNVN5Vmt0eVdHVWhKL3phTElvaXQ3TnBqZmlCMGVvUUFQb3BGcC9YNmp2QWF3UExVbTliWXhncGhCOFIrWGo3RFpZYXV4N0d6ZW9XVE84MCthS3p3TmxuVXo5bUxMZU9WaVE0L1ptOEJQdzQ0RUxoSWFGMElVRUo4RzJDQ2QvWDRvZ3VTT2xuOUVKTG9pdjltamNCSHFIeno1c2VQS2xTMVJMR1U3RDBWSUpkVWJUbHpia1ZKaFQyNEtQZFhMbHdSTEE4OFcraVBNYXgzYlFGRHI1M3ZzVGJiWHpaYjBtcHR1UG56ZDJ4MkJCT3NuMjJVR29BQnBIdDBkSkI0Ym9xQmUzQlQrRVBJOFBZTldwQk5wV1dHSEpGOUkyWE04Qkt3bW1Wb0tvVGpabDhMSEhQZU8yL2R6TGFETGxNcjZWZVUvc0N2eW8wRU1TME9tdEVDNTFCZzViZ2lPYW96Z0hWcUx1c1dQd00zbkZJOTFtTlJuMnNhUDZ0RUY4NDFaWVBJQXByVVYxek8xcmlaR0lIOU1FOTRJT29oN0ErUHdtVT0iLCJBdXRoSW5mbyI6IntcIkNJXCI6XCJmZUJHcHZBbFU5WitxcUVFZUxkeUt3TlR3aklDS3lmRkorelU0ZUJYYmYzMkVzeDRaUkt3RXpOSFJjeGRnVmJOXCIsXCJDYWxsZXJcIjpcIkNTenZsTHJ6OHBOUkdjNWZVVlUzZjdqb2ZoNTh3ZkY3TDFHa3RmUnk5NkU9XCIsXCJFeHBpcmVUaW1lXCI6XCIyMDIyLTA0LTE4VDA1OjQxOjA0WlwiLFwiTWVkaWFJZFwiOlwiYmYyYjNjZjY4OTVkNGY5OWJlMTQzMWZhOWJhYjRmZjRcIixcIlNpZ25hdHVyZVwiOlwiQ2Z1ZGNydlJKWCtkNzZjdS9HdzJudFBwd3VnPVwifSIsIlZpZGVvTWV0YSI6eyJTdGF0dXMiOiJOb3JtYWwiLCJWaWRlb0lkIjoiYmYyYjNjZjY4OTVkNGY5OWJlMTQzMWZhOWJhYjRmZjQiLCJUaXRsZSI6Iui3ryDkurog5aWzIOS4uyIsIkNvdmVyVVJMIjoiaHR0cDovL291dGluLTI5Y2UzNGQ1YmVjNDExZWM5MzUzMDAxNjNlMWM3NDI2Lm9zcy1jbi1zaGFuZ2hhaS5hbGl5dW5jcy5jb20vYmYyYjNjZjY4OTVkNGY5OWJlMTQzMWZhOWJhYjRmZjQvc25hcHNob3RzL2VhNmZlNTZlODFhNjRiMTY5ZTA2NzEwNDBhYjhhMGFjLTAwMDAxLmpwZz9FeHBpcmVzPTE2NTAyNjM5NjQmT1NTQWNjZXNzS2V5SWQ9TFRBSThiS1NaNmRLamY0NCZTaWduYXR1cmU9ZjBRamMxUEpHczQ4RFhCRWoxanViWmt4SlV3JTNEIiwiRHVyYXRpb24iOjE5Ljk2MX0sIkFjY2Vzc0tleUlkIjoiU1RTLk5VeHZHM05KeURGRkRMQTFDTTViODhzZ3MiLCJBY2Nlc3NLZXlTZWNyZXQiOiI2bWJ2Z1FNeVFmRWhqTHNaMVAyY2VKVUZqbll2ejNUbmNGZzN4b3lkTGFVYyIsIlJlZ2lvbiI6ImNuLXNoYW5naGFpIiwiQ3VzdG9tZXJJZCI6MTU4ODI0MTU0NTc1NjEyNn0= |
| VideoMeta.Title = 路 人 女 主 |
| RequestId = 53499E5F-54EA-551B-BEA9-3211AE80259A |
- 测试获取视频播放地址

| |
| PlayInfo.PlayURL = https://outin-29ce34d5bec411ec935300163e1c7426.oss-cn-shanghai.aliyuncs.com/sv/4e814426-1803b2d1940/4e814426-1803b2d1940.flv?Expires=1650264075&OSSAccessKeyId=LTAI8bKSZ6dKjf44&Signature=DZs%2F4BvcTxjz4LNIUEEFuqbqmaw%3D |
| VideoBase.Title = 路 人 女 主 |
| RequestId = E46B4BE4-CF41-58CE-8DEB-8242F80C9D65 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App