使用阿里云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.mzph.cn/news/843731.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浙江大学数据结构MOOC-课后习题-第九讲-排序2 Insert or Merge

题目汇总 浙江大学数据结构MOOC-课后习题-拼题A-代码分享-2024 题目描述 测试点 思路分析 刚开始我打算想推出一个规律,来判断是否是归并排序,但实在太过于复杂,我很难去想出这样的规律…因此,参考了其他博主的思路——每做一次排…

【微服务】安装docker以及可视化界面

1.配置yum下载源为aliyun源 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo2.下载docker不加版本号默认为最新版本 yum install -y docker-ce3.启动以及开机自启 #启动docker命令 systemctl start docker #设置开机自启命令…

计算机组成原理----原码,反码与补码

目录 1.原码的出现 2.反码的出现 3.补码的出现 4.关于补码 1.原码的出现 我们通常使用"","-"判断数字的正负,而在计算机中,则将二进制的首位当作标记符号,"0"表示正数,"1"表示负数,这样就解决了在计算机中表示数值正负的问题,唯一…

allure测试报告用例数和 pytest执行用例数不相同问题

我出现的奇怪问题: pytest执行了9条用例,但是测试报告确只显示3条用例 我将其中的一个代码删除后,发现allure测试报告又正常了 我觉得很奇怪这个代码只是删除了二维数组的第一列,我检查了半天都找不到问题,只有降低版本了。导致原因:allure-pytest版本使用的是最新版本,…

机器学习-3-特征工程的重要性及常用特征选择方法

参考特征重要性:理解机器学习模型预测中的关键因素 参考[数据分析]特征选择的方法 1 特征重要性 特征重要性帮助我们理解哪些特征或变量对模型预测的影响最大。 特征重要性是数据科学中一个至关重要的概念,尤其是在建立预测性任务的模型时。想象你正在尝试预测明天是否会下…

ubuntu中idea创建spark项目步骤

1.前置条件 ubuntu中已经安装idea,jdk,scala,spark 2.打开idea,新建,选择Maven项目 3.在IDEA中,File-Setting-Plugin,下载Scala插件 4.File-project structure,导入插件 4.1在全局库中,选择导入刚才的sca…

写论文时某一行的字间距突然增大,如何解决?

问题描述: 某一行的字间距突然变大,占满了一行,检查设置也没有异常。 如何解决 一、全选出现问题的段落 二、右键,然后点击段落 三、然后勾选允许西文在单词中间换行 四、正常了

心链4---搜索页面前后端业务实现以及分布式session的共享实现

心链 — 伙伴匹配系统 搜索详情页面 之前前端的代码写到了搜索页面可以挑选搜索标签,并没有去根据具体标签搜索用户。这里就开始实现。 新建SearchResultPage.vue,并添加相关路由。 在搜索页添加搜索按钮,和触发点击。搜索页选择标签&#x…

WEB安全:Content Security Policy (CSP) 详解

Content Security Policy (CSP) 是一种强大的网页安全机制,用于防止跨站脚本 (XSS) 和其他注入攻击。通过设置一系列的内容安全策略,CSP 可以限制网页可以加载的资源,从而保护用户数据和网站的安全性。 什么是 XSS 攻击? 跨站脚本攻击 (XSS) 是一种常见的安全漏洞,攻击者…

闲鱼电商运营高级课程,一部手机学会闲鱼开店赚钱

课程下载:https://download.csdn.net/download/m0_66047725/89360471 更多资源下载:关注我。 课程内容: 10-9、怎么寻找优质的货源店铺.mp4 11-10、怎么去选择商品图片.mp4 12-11、商品图片的注意避免事项.mp4 13-12、怎么写标题.mp4 …

【Mybatis】映射文件中获取单个参数和多个参数的写法

xml的映射文件中获取接口方法中传来的参数是直接用#{}的方式来获取的 那么接下来,我们就具体来说一下获取参数里边的各种规则和用法 1.单个参数,比如上面的getOneUser,只有一个id值作为参数 Mybatis对于只有一个参数的情况下,不…

系统思考—决策

风险来自于你不知道你在做什么。——沃伦巴菲特 今天和一个合作伙伴的创始人交流,她提出了一个引人深思的问题:“策略性陪伴和战略复盘,什么原因不由客户自己来做?”这个问题让我深入思考了第三方策略性陪伴顾问的独特价值和重要…

06 Linux编程-网络编程

1、为什么需要网络编程 管道、消息队列、共享内存、信号、信号量的IPC都是依赖于系统内核的,因此这些方式无法进行多机间(例如:linux与android、linux与单片机等)的通信。 网络编程是基于网络的,因此需要网络地…

定位器与PWM的LED控制

文章目录 一、STM32定时器二、脉宽调制pwm三、定时器控制led(1)实验内容(2)创建工程(3)Keli程序(4)观察波形图(5)实物连接图(6)实践效…

一文了解MyBatis

文章目录 MyBatis1. MyBatis的执行流程2. MyBatis是否支持延迟加载3. MyBatis延迟加载的底层原理4. MyBatis的二级缓存机制用过吗5. 谈谈MyBatis框架的优势6. 简单描述MyBatis的工作原理7. MyBatis中的sql标签8. MyBatis中的${}和#{}的区别9. MyBatis中ResulyMap的作用[重要]10…

UDP网络聊天室(更)

服务器端 #include <header.h> typedef struct node {char name[20];struct sockaddr_in cli_addr;struct node *next; }node,*node_p; typedef struct msg {char type;char name[20];char text[128]; }msg; node_p create_link() {node_p H(node_p)malloc(sizeof(node)…

网络业务创新驱动下的DPU P4技术,中科驭数在网络开源技术生态大会上分享最新进展

2024年5月25日&#xff0c;由中国通信学会指导&#xff0c;中国通信学会开源技术专业委员会、江苏省未来网络创新研究院主办的第四届网络开源技术生态大会在北京举办&#xff0c;中科驭数产品总监李冬以《合作如兰&#xff0c;扬扬其香 中科驭数助力P4产业发展与生态建设》为主…

Cweek2+3

C语言学习 五.操作符 5.单目操作符(2) sizeof不能用于计算动态分配的内存 在对数组使用sizeof时&#xff0c;返回的是整个数组的大小&#xff08;所有元素的总字节数&#xff09;。而对指针使用sizeof时&#xff0c;返回的是指针本身的大小&#xff08;通常是机器字长的大小…

怎么简单的把图片缩小?图片在线改大小的方法

在日常工作中经常需要在网上上传图片&#xff0c;但是一般网上不同的平台对上传的图片大小和尺寸都会有限定的要求&#xff0c;不符合要求无法正常上传使用。所以当遇到图片太大的问题时&#xff0c;该如何快速修改图片大小&#xff0c;有很多的小伙伴都很关注这个问题的解决方…

【Qt秘籍】[002]-开始你的Qt之旅-下载

一、Qt的开发工具有哪些&#xff1f; Qt的开发工具概述Qt支持多种开发工具&#xff0c;其中最常见的开发工具是 1.QtCreator 【易上手/有少量bug/适合新手】 2.VisualStudio 【功能强大/易出错/需要更多额外配置】 3.Eclipse 【清朝老兵IDE/不建议使用】 【注意&#xff1…