java对上传阿里云视频压缩转码

本文会对整个接口的代码贴出来的:
pom依赖

<dependency>
	<groupId>com.github.dadiyang</groupId>
	<artifactId>jave</artifactId>
	<version>1.0.5</version>
</dependency>

要用到的实体类:

@Data
public class FileUploadRespDto implements Serializable{/**
     * 
     */
    private static final long serialVersionUID = -1027809658897908756L;

    @ApiModelProperty(value = "文件虚拟地址")
    private String relativePath;
    
    /**
     * 第一个文件缩略图或视频截图虚拟地址
     */
    @ApiModelProperty(value = "文件缩略图虚拟地址")
    private String thumbPath;
    
    /**
     * 文件真实名称
     */
    @ApiModelProperty(value = "文件原始文件名")
    private String originalFileName;
    
    @ApiModelProperty(value = "文件存储的文件名")
    private String realFileName;
    /**
     * 文件大小,单位:字节
     */
    @ApiModelProperty(value = "文件大小,单位:字节")
    private Long fileSize;
    
    /**
     * 文件类型
     */
    private String fileType;
}
@Data
public class FileUploadReqtDto implements Serializable {
    
    private static final long serialVersionUID = 546925399464614774L;

    /**
     * spring的上传文件ServletRequest
     */
    private MultipartHttpServletRequest multipartRequest;
}
@Getter
@Setter
@ApiModel(description = "上传文件的dto")
public class UploadFileVO implements Serializable {

    private static final long serialVersionUID = -8817617589487164863L;

    /**
     * 文件后缀名
     */
    @ApiModelProperty(value = "文件后缀名")
    private String extName;
    
    /**
     * 上传的原始文件名
     */
    @ApiModelProperty(value = "上传的原始文件名")
    private String originalFileName;
    
    /**
     * 文件大小:单位字节
     */
    @ApiModelProperty(value = "文件大小:单位字节")
    private Long fileSize;
    
    /**
     * 文件类型
     */
    @ApiModelProperty(value = "文件类型")
    private String fileType;
    
    /**
     * 文件数据流
     */
    @ApiModelProperty(value = "文件数据流")
    private InputStream inputStream;
    
    /**
     * 文件数据输出的复制流
     */
    @ApiModelProperty(value = "文件数据输出的复制流,不用传")
    private ByteArrayOutputStream byteArrayOutputStream;
    
    @Override
    public String toString() {
        StringBuilder sBuilder = new StringBuilder();
        sBuilder.append("上传的原始文件名:" + this.originalFileName + ",");
        sBuilder.append("文件大小:" + this.fileSize + "字节,");
        sBuilder.append("文件后缀名:" + this.extName);
        sBuilder.append("文件类型:" + this.fileType);
        return sBuilder.toString();
    }
}

好了从cotroller层开始

  @PostMapping("/videoToLoseWeight")
    @ApiOperation(value = "视频减肥接口")
    public ResponseBean<List<FileUploadRespDto>> uploads(HttpServletRequest request) throws Exception {
        FileUploadReqtDto uploadReqtDto = new FileUploadReqtDto();
        MultipartHttpServletRequest multipartRequest = null;
        try {
            multipartRequest = (MultipartHttpServletRequest)request;
        } catch (Exception e) {
            throw new BLogicException("文件格式不正确!");
        }
        uploadReqtDto.setMultipartRequest(multipartRequest);
        return ResponseUtils.createRet(ResultCode.OK, fileUploadBLogic.uploads(uploadReqtDto));
    }
}

接着service层

/**
     * 视频减肥接口
     * @param fileUploadReqtDto
     * @return
     * @throws Exception
     */
    public List<FileUploadRespDto> uploads(FileUploadReqtDto fileUploadReqtDto) throws Exception {
        MultipartHttpServletRequest multipartRequest = fileUploadReqtDto.getMultipartRequest();
        Iterator<String> fileNames = multipartRequest.getFileNames();
        String multipartContentType = multipartRequest.getMultipartContentType(fileNames.next());
        List<MultipartFile> files = multipartRequest.getFiles(FILE);
        List<FileUploadRespDto> results = new ArrayList<>();
        for (MultipartFile mf : files) {
            if (!mf.isEmpty()) {
                UploadFileVO uploadFileVO = uploadFilehandle.getUploadFileVO(mf);
                if (ObjectUtils.isNotEmpty(uploadFileVO)) {
                    FileUploadRespDto fileUploadRespDto = uploadVideos(uploadFileVO);
                    results.add(fileUploadRespDto);
                }
            }
        }
        return results;
    }

    /**
     * 处理文件并上传
     * @param uploadFileVO
     * @return
     * @throws IOException
     */
    private FileUploadRespDto uploadVideos(UploadFileVO uploadFileVO) throws IOException {
        log.info("视频减肥接口文件类型" + uploadFileVO.getFileType());
        FileUploadRespDto uploadRespDto = new FileUploadRespDto();
        String filePath = "src/main/resources/";
        String UUID = StringUtils.getUUID();
        String contextPath1 = filePath + uploadFileVO.getOriginalFileName() + "." + uploadFileVO.getExtName();
        String contextPath2 = filePath + UUID + "." + "mp4";
        //定义文件
        File tempFile = null;
        File f = null;
        InputStream inputStream = null;
        try {
            tempFile = new File(contextPath1);
            if (!tempFile.exists()) {
                //生成文件
                FileUtils.copyInputStreamToFile(uploadFileVO.getInputStream(), tempFile);
            }
            encode(contextPath1, contextPath2);
            f = new File(contextPath2);
            inputStream = new FileInputStream(f);
            String fileName = UUID + "." + "mp4";
            String url = aliyunOSSUploadService.upload(inputStream, fileName);
            log.info("视频减肥接口relativePath:" + url);
            uploadRespDto.setRelativePath(url);
            uploadRespDto.setFileSize(f.exists()&&f.isFile()? Long.valueOf(Math.round((float)f.length()/1000)):null);
            uploadRespDto.setOriginalFileName(uploadFileVO.getOriginalFileName());
            uploadRespDto.setRealFileName(fileName);
            uploadRespDto.setFileType(uploadFileVO.getFileType());
        } catch (IOException e) {
            throw new BLogicException("上传失败");
        } finally {
            //将临时文件删除
            tempFile.delete();
            f.delete();
            inputStream.close();
        }
        return uploadRespDto;
    }

    /**
     * 视频文件处理
     * @param sources
     * @param targets
     */
    public static void encode(String sources, String targets) {
        File source = new File(sources);
        File target = new File(targets);
        try {
            // 音频编码设置
            AudioAttributes audio = new AudioAttributes();
            audio.setCodec("libmp3lame");
            audio.setBitRate(new Integer(56000));
            audio.setChannels(new Integer(1));
            audio.setSamplingRate(new Integer(22050));

            // 视频编码设置
            VideoAttributes video = new VideoAttributes();
            video.setCodec("mpeg4");
            video.setBitRate(new Integer(800000));
            video.setFrameRate(new Integer(15));
            video.setSize(new VideoSize(512, 384));

            // 视频转码编码设置
            EncodingAttributes attrs = new EncodingAttributes();
            attrs.setFormat("mp4");
            attrs.setAudioAttributes(audio);
            attrs.setVideoAttributes(video);

            // 编码器
            Encoder encoder = new Encoder();
            encoder.encode(source, target, attrs);

            System.out.println("压缩完成...");
        } catch (EncoderException e) {
            e.printStackTrace();

        }
    }

aliyunOSSUploadService.upload(inputStream, fileName)是阿里云上传的方法。反参如图:

在这里插入图片描述

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值