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

news2024/11/16 13:46:53

目录

前言

视频上传


前言

        阿里云对象存储服务(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 Endpoint
    private static final String accessKeyId = ""; // Access Key ID
    private static final String accessKeySecret = ""; // Access Key Secret
    private 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(() -> {
            // 创建OSSClient
            OSS 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-Type
                switch (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 {
                // 关闭OSSClient
                ossClient.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"; // 用户ID
        File videoFile = new File("C:/Users/86155/Desktop/职业规划.mp4"); // 视频文件路径
        uploadVideoToOSS(userId, videoFile);
    }
}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1705761.html

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

相关文章

基于mybatis-plus的多语言扩展

概览 对于表中字段,需要实现多语言的方案探讨: 1.表中横向扩展多个字段分别存储中文,英文,俄语等语言字段,查询时,根据需要查询的语言,进行查询 2.增加一张多语言表,存储多语言信…

RedHat9网络配置设计

目录 一、实验目的 二、实验过程 1、配置新网络接口 2、多网卡配置网络 3、网络接口的绑定,进行远程访问 4、配置网络接口的组合 一、实验目的 本次实验的目的是使用nmcli命令工具配置网络,ens160配置多个网卡,进行网络接口的绑定与组合…

iPhone“已删除”照片被恢复,苹果到底有没有后门?

继微软本周推出的Windows“回忆”功能引发隐私焦虑,遭马斯克和安全大咖们猛烈抨击后,苹果iPhone手机近日也曝出了类似的“记忆门”。 删除十几年的iPhone照片被恢复 近日,有苹果手机用户更新了苹果上周发布的iOS 17.5系统后,意外…

ChatGPT越来越懒,都学会反过来PUA人类了

OpenAI 表示自 11 月 11 日以来,他们就没有更新过模型,模型行为是不可预测的,他们正在研究如何修复。 不知你有没有注意到,最近一段时间,GPT-4 变得有些「懒惰」,现在的它,老是拒绝执行某些任务…

关于亚马逊、速卖通、虾皮、Lazada等平台自养号测评IP的重要性

在自养号测评中,IP的纯净度是一个至关重要的问题,它直接关系到账号的安全性和稳定性如果使用了被平台识别为异常或存在风险的IP地址,那么账号可能会面临被封禁的风险。这将对账号的正常使用和测评过程中造成严重影响。而使用纯净的IP地址&…

oracle准确记录数据提交时间

注意:mysql中的默认值同样记录的是dml操作发出时的时间,并且没有找到mysql中准确记录commit时间的方法。 oracle中数据发生变动时,如何准确记录发生变动时的时间。一般会使用ts字段,该字段使用默认值,default to_char…

【JAVA WEB实用与优化技巧】如何自己封装一个自定义UI的Swagger组件,包含Swagger如何处理JWT无状态鉴权自动TOKEN获取

目录 一、Swagger 简介1. 什么是 Swagger?2. 如何使用 Swagger3. Springboot 中swagger的使用示例1. maven 引入安装2. java配置 二、Swagger UI存在的缺点1.不够方便直观2.请求的参数没有缓存3.不够美观4.如果是JWT 无状态登录,Swagger使用起来就没有那…

简化跨网文件传输摆渡过程,降低IT人员工作量

在当今数字化时代,IT企业面临着日益增长的数据交换需求。随着网络安全威胁的不断演变,网关隔离成为了保护企业内部网络不受外部威胁的重要手段。然而,隔离的同时,企业也需要在不同网络间安全、高效地传输文件,这就催生…

harmony开发遇到的问题

arkt-no-props-by-indexProperty ‘name’ has no initializer and is not definitely assigned in the constructor.arkts-no-any-unknown typescript 中的报错 Property ‘name’ has no initializer and is not definitely assigned in the construc… ArkTs编译常见错误汇…

全网爆火Remini 粘土滤镜风格,我用ComfyUI一键生成了(保姆级教程)!

一、火爆全网的Remini! Remini真的火爆了!最近大家的朋友应该都被粘土滤镜刷屏了。 小红书上粘土滤镜、粘土特效的帖子动不动就是几百万浏览量,几千赞。 在有些电商平台上还有人接单,帮忙定制remini粘土风格的照片! …

Shell编程之正则表达式与文本处理器

一、正则表达式 之前学习了 Shell 脚本的基础用法,已经可以利用条件判断、循环等语句编辑 Shell 脚本。接下来我们将开始介绍一个很重要的概念——正则表达式(RegularExpression,RE)。 1.1正则表达式概述 下面先来了解一下正则表…

软件产品测试报告模版分享,获取专业测试报告所需时间和费用

软件产品测试是一个系统性的、全面的质量保障过程,旨在发现和修复软件产品中的缺陷和错误,以确保软件的功能完善、性能卓越、安全可靠。 软件产品测试报告是软件测试过程中的重要文档之一,它主要记录了测试人员对软件产品进行测试的结果和结…

LLM 大模型学习必知必会系列(十三):基于SWIFT的VLLM推理加速与部署实战

LLM 大模型学习必知必会系列(十三):基于SWIFT的VLLM推理加速与部署实战 1.环境准备 GPU设备: A10, 3090, V100, A100均可. #设置pip全局镜像 (加速下载) pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ #安装ms-swift pip install ms-…

[链表]求中间节点、反转链表、回文链表

一、求链表的中间节点 876. 链表的中间结点 - 力扣(LeetCode) 快慢指针法: 分别定义两个节点的指针(pSlow和pFast)指向链表的第一个节点,然后两个指针一起往后遍历链表,pFast一次移动两个节点,pSlow一次移动一个节点&…

打工人好用的大模型问答,还需要一款可靠的文档解析工具

如果说三四年前,我们对AI的展望还停留在科幻片的话,现在,通向AI智能的路径已经初现端倪。各行各业的朋友们不约而同地嗅到了大模型带来的生产方式变革气息。 LLM宣布了AI时代的正式到来。 2022年11月30日,ChatGPT发布&#xff0…

牛客NC362 字典序排列【中等 DFS Java/Go/PHP】

题目 题目链接: https://www.nowcoder.com/practice/de49cf70277048518314fbdcaba9b42c 解题方法 DFS,剪枝Java代码 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回…

SaltStack

SaltStack 官方文档 1.简介 作用:批量处理状态管理(配置管理)事件驱动(通过事件触发操作)管理私有云/公有云 yum仓库:http://repo.saltstack.com 安装1.master和minionrpm --import https://repo.saltproj…

政府鼓励社会力量建设气膜体育场馆—轻空间

2023年12月1日,国家体育安全总局发布的《关于政协第十四届全国委员会第一次会议第00374号(文体宣传类020号)提案答复的函》中指出,2016年和2020年国务院发布的文件中均涉及推动气膜场馆建设及完善装配式建筑相关政策。下一步&…

Git学习篇

目录 使用命令导入项目 使用命令导入项目 1. 使用git init 命令初始化一个新的Git仓库。 git init 是 Git 命令,用于初始化一个新的 Git 仓库。当您想要开始跟踪一个新项目的版本控制时,可以运行 git init 命令来初始化一个空的 Git 仓库。 如果出现以下…

项目文件上传宝塔后只有一个文件内容不同且没有报错该如解决?

一、遇到此类问题不要慌先检查文件是否上传正确; 二、检查文件是否可以在浏览器中正常运行; 三、检查文件是否存在某些不明显的报错; 四、检查此页面的是否存在代码错误; 五、标签链接是否错误; 我所遇到的错误是…