目录
前言
阿里云对象存储服务(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控制台去查看结果