6.1 引入pom依赖

  1. <dependency>
  2. <groupId>com.aliyun</groupId>
  3. <artifactId>aliyun-java-sdk-core</artifactId>
  4. <version>4.5.1</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>com.aliyun.oss</groupId>
  8. <artifactId>aliyun-sdk-oss</artifactId>
  9. <version>3.10.2</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>com.aliyun</groupId>
  13. <artifactId>aliyun-java-sdk-vod</artifactId>
  14. <version>2.15.11</version>
  15. </dependency>
  16. <dependency>
  17. <groupId>com.aliyun</groupId>
  18. <artifactId>aliyun-sdk-vod-upload</artifactId>
  19. </dependency>
  20. <dependency>
  21. <groupId>com.alibaba</groupId>
  22. <artifactId>fastjson</artifactId>
  23. <version>1.2.28</version>
  24. </dependency>
  25. <dependency>
  26. <groupId>org.json</groupId>
  27. <artifactId>json</artifactId>
  28. <version>20170516</version>
  29. </dependency>
  30. <dependency>
  31. <groupId>com.google.code.gson</groupId>
  32. <artifactId>gson</artifactId>
  33. <version>2.8.2</version>
  34. </dependency>

6.2 配置application.yml文件

  1. # 服务端口
  2. server.port=8003
  3. # 服务名
  4. spring.application.name=service-vod
  5. # 环境设置:dev、test、prod
  6. spring.profiles.active=dev
  7. #阿里云 vod
  8. #不同的服务器,地址不同
  9. aliyun.vod.file.keyid=your accessKeyId
  10. aliyun.vod.file.keysecret=your accessKeySecret
  11. # 最大上传单个文件大小:默认1M
  12. spring.servlet.multipart.max-file-size=1024MB
  13. # 最大置总上传的数据大小 :默认10M
  14. spring.servlet.multipart.max-request-size=1024MB

6.3 创建常量类

package com.guli.vod.util;

@Component
//@PropertySource("classpath:application.properties")
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;
    }
}

6.4 复制工具类到项目中

package com.guli.vod.util;

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;
    }
}

6.5 创建service接口

package com.guli.vod.service;
public interface VideoService {
    String uploadVideo(MultipartFile file);
}

6.6 创建service接口的实现类

package com.guli.vod.service.impl;

@Service
public class VideoServiceImpl implements VideoService {

    @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);

            //如果设置回调URL无效,不影响视频上传,可以返回VideoId同时会返回错误码。
            // 其他情况上传失败时,VideoId为空,此时需要根据返回错误码分析具体错误原因
            String videoId = response.getVideoId();
            if (!response.isSuccess()) {
                String errorMessage = "阿里云上传错误:" + "code:" + response.getCode() + ", message:" + response.getMessage();
                log.warn(errorMessage);
                if(StringUtils.isEmpty(videoId)){
                    throw new GuliException(20001, errorMessage);
                }
            }

            return videoId;
        } catch (IOException e) {
            throw new GuliException(20001, "guli vod 服务上传失败");
        }
    }
}

6.7 创建controller

package com.guli.vod.controller.admin;

@Api(description="阿里云视频点播微服务")
@CrossOrigin //跨域
@RestController
@RequestMapping("/admin/vod/video")
public class VideoAdminController {

    @Autowired
    private VideoService videoService;

    @PostMapping("upload")
    public R uploadVideo(
            @ApiParam(name = "file", value = "文件", required = true)
            @RequestParam("file") MultipartFile file) throws Exception {

        String videoId = videoService.uploadVideo(file);
        return R.ok().message("视频上传成功").data("videoId", videoId);
    }
}

6.8 使用Swagger进行测试