天天看點

記錄:使用阿裡雲視訊點播Vod實作上傳本地視訊

1.導入Maven依賴

<dependencies>
    <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>

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
    </dependency>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
    </dependency>
           

其中aliyun-sdk-vod-upload元件還未正式開源,需要手動導入jar包,首先在阿裡雲官方下載下傳對應sdkjar包,解壓之後再lib目錄cmd使用指令:

mvn install:install-file -DgroupId=com.aliyun -DartifactId=aliyun-sdk-vod-upload -Dversion=1.4.12 -Dpackaging=jar -Dfile=aliyun-java-vod-upload-1.4.12.jar -Dmaven.repo.local=E:\apache-maven-3.3.9\repository

2、目錄結構

記錄:使用阿裡雲視訊點播Vod實作上傳本地視訊

application.yml:

server:
  port: 8003
spring:
  application:
    name: service-vod
  servlet:
    multipart:
      #最大上傳單個檔案大小:預設1M(不設定會報錯)
      max-file-size: 1024MB
      #最大總上傳的資料大小:預設10M
      max-request-size: 1024MB

  cloud:
    nacos:
      discovery:
        server-addr: 192.168.159.1xx:8848
aliyun:
  vod:
    file:
      keyid: LTAI4G8q7nBEsUb1NGc2i
      keysecret: 3FEJ5vh5EttqiiLdvijuvUWdt5
      region-id: cn-shanghai  #固定

#jasypt加密的密匙
jasypt:
  encryptor:
    password: EbfYkitulv73I2p0mXI50JMXoaxZTKJ7
           

ConstantPropertiesUtils:

//方式一:
@Component //實作InitializingBean接口可以執行執行指派後的一些邏輯(由于屬性是private的)
public class ConstantPropertiesUtils implements InitializingBean {

    @Value("${aliyun.vod.file.keyid}")
    private String keyId;

    @Value("${aliyun.vod.file.keysecret}")
    private String keySecret;

    @Value("${aliyun.vod.file.reginid}")
    private String reginId;

    /*定義公有靜态常量*/
    public static String KEYID;
    public static String KEYSECRET;
    public static String REGINID;


    @Override
    public void afterPropertiesSet() throws Exception {
        KEYID = keyId;
        KEYSECRET = keySecret;
        REGINID = reginId;
    }
}

//或者方式二:
@Component
@ConfigurationProperties(prefix = "aliyun.vod.file")
@Data
public class ConstantPropertiesUtil {

    private String accessKeyId;

    private String accessKeySecret;

    private String regionId;
}
@Slf4j
@Service
public class VedioServiceImpl implements VedioService {

    @Autowired
    private ConstantPropertiesUtil constantPropertiesUtil;
    ...
              UploadStreamRequest request =new UploadStreamRequest(constantPropertiesUtil.getAccessKeyId(),
                            constantPropertiesUtil.getAccessKeySecret(),
                            title,
                            originalFilename,
                            inputStream);
                            ...
           

VodApplication:

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@ComponentScan(basePackages = {"com.coderkun"}) //掃描swagger等配置
public class VodApplication {
    public static void main(String[] args) {
        SpringApplication.run(VodApplication.class,args);
    }
}
           

VodController:

@RestController
@RequestMapping("/eduvod/video")
@CrossOrigin
public class VodController {

    @Autowired
    private VodService vodService;

    /*上傳視訊到阿裡雲*/
    @PostMapping("/uploadAlyVideo")
    public R uploadAlyVideo(MultipartFile file){
        //傳回上傳視訊傳回的id
        String videoId = vodService.uploadAlyVideo(file);
        return R.ok().data("data",videoId);
    }
    //根據視訊id删除視訊
    @DeleteMapping("delete/{vedioId}")
    public ResponseResult deleteByVedioId(@PathVariable String vedioId){
        final String remove = vedioService.remove(vedioId);
        return ResponseResult.success().message("視訊删除成功").data("remove",remove);
    }
	//批量删除視訊
    @DeleteMapping("deleteBatch/{videoSourceIds}")
    public ResponseResult deleteBatch(@PathVariable List<String> videoSourceIds){
        String vedioIdArray = StringUtils.join(videoSourceIds.toArray(), ",");
        final String remove = vedioService.remove(vedioIdArray);
        return ResponseResult.success().message("視訊删除成功").data("remove",remove);
    }
}
           

VodService:

public interface VodService {
    String uploadAlyVideo(MultipartFile file);
}
           

VodServiceImpl:

@Service
public class VodServiceImpl implements VodService {

    /*上傳視訊到阿裡雲*/
    @Override
    public String uploadAlyVideo(MultipartFile file) {
        try {
            String accessKeyId = ConstantPropertiesUtils.KEYID;
            String accessKeySecret = ConstantPropertiesUtils.KEYSECRET;

            String fileName = file.getOriginalFilename();  //原始檔案名稱
            String title = fileName.substring(0,fileName.lastIndexOf("."));   //上傳之後檔案名稱
            InputStream in = file.getInputStream();

            //上傳視訊的方法
            UploadStreamRequest request = null;

            request = new UploadStreamRequest(accessKeyId, accessKeySecret, title, fileName, in);

            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;  //将視訊id傳回,儲存到資料庫中而不是儲存視訊位址。
        } catch (IOException e) {
            throw new GuliException(20001, "上傳時出現異常");
            return null;
        }
	//删除視訊
    @Override
    public String remove(String vedioId) {
        String requestId ;
        try {
        	//初始化
            DefaultAcsClient client = AliyunVodSdkUtil.initVodClient(
                    ConstantPropertiesUtils.KEYID,
                    ConstantPropertiesUtils.KEYSECRET,
                    ConstantPropertiesUtils.REGINID ;
            DeleteVideoRequest request = new DeleteVideoRequest();
            request.setVideoIds(vedioId);
            DeleteVideoResponse response = client.getAcsResponse(request);
            requestId = response.getRequestId();
        }catch (ClientException e){
            throw new GuliException(20001,e.getMessage());
        }
        return requestId;   //傳回請求id
      }
    }
           

工具類AliyunVodSdkUtil :

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.profile.DefaultProfile;

public class AliyunVodSdkUtil {
    public static DefaultAcsClient initVodClient(String regionId,String accessKey,String accessSecret){
        DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKey, accessSecret);
        DefaultAcsClient client = new DefaultAcsClient(profile);
        return client;
    }
}
           

歡迎關注公衆号Java技術大聯盟,會不定期分享BAT面試資料等福利。

記錄:使用阿裡雲視訊點播Vod實作上傳本地視訊

繼續閱讀