使用阿里云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 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控制台去查看结果

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Spring Cloud Alibaba提供了一个很好用的阿里云OSS客户端工具:`aliyun-sdk-oss-spring-boot-starter`,借助它我们可以很方便地实现视频上传,下面是一个简单的示例: 1. 添加依赖 首先需要在`pom.xml`文件中添加以下依赖: ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>aliyun-sdk-oss-spring-boot-starter</artifactId> <version>${aliyun.oss.version}</version> </dependency> ``` 2. 配置OSS 在`application.yml`中添加以下配置: ```yaml aliyun: oss: endpoint: oss-cn-hangzhou.aliyuncs.com access-key: your-access-key secret-key: your-secret-key bucket-name: your-bucket-name ``` 其中,`endpoint`是OSS服务的访问域名,`access-key`和`secret-key`是阿里云账号的访问密钥,`bucket-name`是要上传的目标存储桶名称。 3. 实现上传逻辑 ```java @Service public class VideoService { @Autowired private OSS ossClient; public void uploadVideo(String objectName, InputStream inputStream) { ossClient.putObject("your-bucket-name", objectName, inputStream); } } ``` 在`VideoService`中,我们注入了`OSS`客户端,然后实现了一个`uploadVideo`方法,用于将视频文件上传到指定的OSS存储桶中。该方法接收两个参数,一个是上传文件的名称,另一个是文件的输入流。在方法中,我们调用`putObject`方法将文件上传OSS中。 4. 调用上传接口 最后,在Controller中,我们可以定义一个上传接口,用于接收上传请求: ```java @RestController public class VideoController { @Autowired private VideoService videoService; @PostMapping("/upload") public String upload(@RequestParam("file") MultipartFile file) throws IOException { videoService.uploadVideo(file.getOriginalFilename(), file.getInputStream()); return "success"; } } ``` 在`VideoController`中,我们定义了一个`upload`接口,用于接收上传请求。接收到请求后,我们调用`VideoService`中的`uploadVideo`方法将文件上传OSS中。 这样,我们就完成了一个简单的视频上传功能

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值