引入依赖

在service下创建视频点播service_vod模块,引入依赖

<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>
        </dependency>
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
        </dependency>

        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
        </dependency>
    </dependencies>

前端

 <el-form-item label="上传视频">
          <el-upload
            :on-success="handleVodUploadSuccess"
            :on-remove="handleVodRemove"
            :before-remove="beforeVodRemove"
            :on-exceed="handleUploadExceed"
            :file-list="fileList"
            :action="BASE_API + \'/eduvod/video/uploadiVideo\'"
            :limit="1"
            class="upload-demo"
          >
            <el-button size="small" type="primary">上传视频</el-button>
              <!--文字提示组件-->
            <el-tooltip placement="right-end">
              <div slot="content">
                最大支持1G,<br />
                支持3GP、ASF、AVI、DAT、DV、FLV、F4V、<br />
                GIF、M2T、M4V、MJ2、MJPEG、MKV、MOV、MP4、<br />
                MPE、MPG、MPEG、MTS、OGG、QT、RM、RMVB、<br />
                SWF、TS、VOB、WMV、WEBM 等视频格式上传
              </div>
              <i class="el-icon-question" />
            </el-tooltip>
          </el-upload>
        </el-form-item>
 //删除云端视频
    handleVodRemove(file,fileList){
        video.deleteAlyVideo(this.video.videoSourceId)
          .then(res => {
             //提示信息
                    this.$message({
                        type: \'success\',
                        message: \'删除视频成功!\'
                    });
                    //把文件列表清空
                    this.fileList = []
                    //把video视频id和视频名称值清空
                    //上传视频id赋值
                    this.video.videoSourceId = \'\'
                    //上传视频名称赋值
                    this.video.videoOriginalName = \'\'
          })
    },

    //视频上传成功
    handleVodUploadSuccess(response, file, fileList){
      this.video.videoSourceId = response.data.videoId
      this.video.videoOriginalName = file.name
      console.log("videoId:"+this.video.videoSourceId,
                  "videoName"+file.name)

    },

    //删除视频之前钩子
    beforeVodRemove(file,fileList){
        return this.$confirm(`确定移除 ${ file.name }?`);
    },

nginx配置

#http中加入
   #上传文件大小限制1G,默认1M
	client_max_body_size  1024m;
	#设置为on表示启动高效传输文件的模式
	sendfile 		on; 
	#保持连接的时间,默认65s
	keepalive_timeout 1800

#server加入vod端口,设置8003
server {
		listen  	 9001;
		server_name  localhost;
		location ~ /eduservice/ {
			proxy_pass http://localhost:8001;
		} 
		
		location ~ /eduoss/ {
			proxy_pass http://localhost:8002;
		} 
		
		location ~ /eduvod/ {
			proxy_pass http://localhost:8003;
		} 
	}

后端

1、配置阿里云密钥

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=LTAI4GFzTBo3LTCyo1wLA1Ys
aliyun.vod.file.keySecret=EAcieIxjX84Yr3TCvXX3LG95JNSWnS
# 最大上传单个文件大小:默认1M
spring.servlet.multipart.max-file-size=1024MB
# 最大置总上传的数据大小 :默认10M
spring.servlet.multipart.max-request-size=1024MB

2、读取配置文件数据

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

3、控制层

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

    @Autowired
    private VodService vodService;

    @PostMapping("uploadVideo")
    @ApiOperation(value = "上传视频")
    public Result uploadVideo(MultipartFile file){
        String videoId = vodService.uploadVideo(file);
        return Result.ok().data("videoId",videoId);
    }
}

4、业务层

@Service
public class VodServiceImpl implements VodService {
    @Override
    public String uploadVideo(MultipartFile file) {
        try {
            //accessKeyId, accessKeySecret
            //fileName:上传文件原始名称
            String fileName = file.getOriginalFilename();
            //title:上传之后显示名称
            //截取文件fileName作为title:01.03.09.mp4
            //lastIndexOf("."):返回最后一个.的索引位置
            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;
        }
    }
}

版权声明:本文为silloutte原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/silloutte/p/14460154.html