当前位置: 首页 > news >正文

使用阿里云OSS实现视频上传功能

目录

前言

视频上传


前言

        阿里云对象存储服务(OSS)作为一种高可用、高扩展性的云端存储服务,为开发者提供了便捷、安全的对象存储解决方案。本文将介绍如何利用阿里云OSS实现视频上传功能。

视频上传

前期准备请看阿里云OSS文件上传和下载完整指南

        前两天我拿到这样一个需求,利用OSS进行视频上传,目录结构包含/用户id/年-月-日/时间戳/,视频上传到接定的目录,可以配置。

实现如下:

package com.ctb.sf.oss;import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.ObjectMetadata;import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class OSSUtils {// 阿里云OSS的相关配置信息private static final String endpoint = ""; // OSS Endpointprivate static final String accessKeyId = ""; // Access Key IDprivate static final String accessKeySecret = ""; // Access Key Secretprivate static final String bucketName = ""; // Bucket名称private static final ExecutorService executor = Executors.newFixedThreadPool(10); // 创建大小为10的固定线程池/*** 异步上传视频到OSS* @param userId 用户ID* @param videoFile 待上传的视频文件*/public static void uploadVideoToOSS(String userId, File videoFile) {executor.execute(() -> {// 创建OSSClientOSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);try {// 构建目录结构SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");String currentDate = dateFormat.format(new Date());String timestamp = String.valueOf(System.currentTimeMillis());String ossDirectory = userId + "/" + currentDate + "/" + timestamp + "/";// 设置文件元数据ObjectMetadata metadata = new ObjectMetadata();metadata.setContentLength(videoFile.length());// 获取文件后缀名String fileExtension = getFileExtension(videoFile.getName());// 根据文件后缀名设置Content-Typeswitch (fileExtension.toLowerCase()) {case "mp4":metadata.setContentType("video/mp4");break;case "avi":metadata.setContentType("video/x-msvideo");break;case "mov":metadata.setContentType("video/quicktime");break;//其它default:metadata.setContentType("application/octet-stream"); // 默认设置为二进制流break;}// 上传文件ossClient.putObject(bucketName, ossDirectory + videoFile.getName(), videoFile, metadata);} finally {// 关闭OSSClientossClient.shutdown();}});}/*** 根据文件名获取对应的Content-Type* @param fileName 文件名* @return 对应的Content-Type*/private static String getFileExtension(String fileName) {if (fileName.lastIndexOf(".") != -1 && fileName.lastIndexOf(".") != 0) {return fileName.substring(fileName.lastIndexOf(".") + 1);} else {return "";}}public static void main(String[] args) {String userId = "123456"; // 用户IDFile videoFile = new File("C:/Users/86155/Desktop/职业规划.mp4"); // 视频文件路径uploadVideoToOSS(userId, videoFile);}
}

上传之后,我们可以进入到阿里云的OSS控制台去查看结果

http://www.lryc.cn/news/355677.html

相关文章:

  • LOTO示波器软件新增导览功能
  • 【StructueEngineering】SYMBOL SCHEDULE
  • 简化跨网文件传输摆渡过程,降低IT人员工作量
  • 关于python中屏蔽输出
  • 螺旋矩阵(算法题)
  • ffmpeg-webrtc(metartc)给ffmpeg添加webrtc协议
  • C语言知识大纲
  • 【必会面试题】synchronized锁升级的过程
  • 设计模式——工厂三兄弟之简单工厂
  • 如何使用ChatGPT撰写短视频爆款文案
  • 申办风景园林设计乙级资质如何整理技术人员的专业培训证明
  • 类别型特征
  • java医院管理系统源码(springboot+vue+mysql)
  • vue2 面试题
  • 【JavaEE精炼宝库】多线程(3)线程安全 | synchronized
  • el-table-column两种方法处理特殊字段,插槽和函数
  • huggingface笔记: accelerate estimate-memory 命令
  • 李飞飞亲自撰文:大模型不存在主观感觉能力,多少亿参数都不行
  • 超级好用的C++实用库之套接字
  • C++ | Leetcode C++题解之第108题将有序数组转换为二叉搜索树
  • 5月27日,每日信息差
  • echart扩展插件词云echarts-wordcloud
  • 解决无法直接抓取链接地址
  • java面对对象编程-多态
  • 【Sql Server】随机查询一条表记录,并重重温回顾下自定义函数的封装和使用
  • 基于C#开发web网页管理系统模板流程-主界面管理员录入和编辑功能完善
  • K8s证书过期处理
  • 刷题之路径总和Ⅲ(leetcode)
  • MongoDB 原子操作:确保数据一致性和完整性的关键
  • 2024上半年软考高级系统架构设计师回顾