Java实现oss视频上传(spingboot)

本文介绍了如何在SpringBoot应用中集成阿里云OSS服务进行视频上传,包括所需的Maven依赖、配置文件设置、工具类的编写以及Controller层的实现。通过这个基础实现,可以进一步优化提升上传效率。
摘要由CSDN通过智能技术生成

Java实现oss视频上传(spingboot)

1、需要的Maven依赖

<!--阿里云oss-->
<dependency>
   <groupId>com.aliyun.oss</groupId>
   <artifactId>aliyun-sdk-oss</artifactId>
   <version>3.5.0</version>
</dependency>

2.allyun.properties

阿里云oss
aliyun.access-id= 你的accessKeyId
aliyun.access-key=  你的accessKeySecret
aliyun.bucket= 你的桶名
aliyun.endpoint= oss对外服务的访问域名

3.工具类

package cn.zkly.com.utils;

import cn.zkly.com.BeanConfig.OSSProperties;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectResult;
import net.coobird.thumbnailator.Thumbnails;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.URL;
import java.util.Date;
import java.util.Random;


public class OSSUtil {
   

    /**
     * log日志
     */
    public static final Logger logger = LoggerFactory.getLogger(OSSUtil.class);

    private String endpoint= OSSProperties.ALIYUN_ENDPOINT;
    private String accessKeyId=OSSProperties.ALIYUN_ACCESS_ID;
    private String accessKeySecret=OSSProperties.ALIYUN_ACCESS_KEY;
    private String bucketName=OSSProperties.ALIYUN_BUCKET;
    private String FOLDER=OSSProperties.ALIYUN_DIR;

    /**
     * 上传图片
     *
     * @param url
     * @throws
     */
    public void uploadImg2Oss(String url) throws IOException {
   
        File fileOnServer = new File(url);
        FileInputStream fin;
        try {
   
            fin = new FileInputStream(fileOnServer);
            String[] split = url.split("/");
            this.uploadFile2OSS(fin, split[split.length - 1]);
        } catch (FileNotFoundException e) {
   
            throw<
  • 4
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
好的,以下是使用 Spring Boot阿里云 OSS Java SDK 实现断点上传并显示上传进度的示例代码: ```java import com.aliyun.oss.*; import com.aliyun.oss.model.UploadFileRequest; import com.aliyun.oss.model.UploadFileResult; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; @Service public class OSSService { // 阿里云 OSS 客户端 private final OSS ossClient; // 构造函数注入 OSS 客户端对象 @Autowired public OSSService(OSS ossClient) { this.ossClient = ossClient; } /** * 断点上传文件到 OSS * * @param file 要上传的文件 * @param bucket 存储空间名称 * @param object 存储对象名称 * @param progress 上传进度回调函数 * @throws IOException */ public void uploadFileToOSS(MultipartFile file, String bucket, String object, ProgressCallback progress) throws IOException { // 创建 UploadFileRequest 对象 UploadFileRequest uploadFileRequest = new UploadFileRequest(bucket, object); // 设置要上传的文件 File localFile = File.createTempFile("temp", null); file.transferTo(localFile); uploadFileRequest.setUploadFile(localFile.getAbsolutePath()); // 创建 ResumableUploader 对象 ResumableUploader uploader = new ResumableUploader(ossClient, uploadFileRequest); // 设置上传进度回调函数 uploader.setProgressCallback(progress); // 开始上传文件 UploadFileResult result = uploader.upload(); // 删除本地临时文件 localFile.delete(); // 打印上传结果 System.out.println("ETag: " + result.getETag()); System.out.println("RequestId: " + result.getRequestId()); } } ``` 在上述代码中,我们定义了一个名为 `uploadFileToOSS` 的方法,该方法接收要上传的文件、存储空间名称、存储对象名称和上传进度回调函数作为参数。在方法内部,我们首先创建 `UploadFileRequest` 对象,并设置要上传的文件。然后,我们创建 `ResumableUploader` 对象,并设置上传进度回调函数。最后,我们调用 `upload` 方法开始上传文件。 上传进度回调函数的实现如下: ```java import com.aliyun.oss.event.ProgressEvent; import com.aliyun.oss.event.ProgressEventType; import com.aliyun.oss.event.ProgressListener; public class OSSProgressCallback implements ProgressListener { private final long totalSize; public OSSProgressCallback(long totalSize) { this.totalSize = totalSize; } @Override public void progressChanged(ProgressEvent event) { if (event.getEventType() == ProgressEventType.REQUEST_BYTE_TRANSFER_EVENT) { long bytesWritten = event.getBytes(); System.out.println("Uploaded " + bytesWritten + " bytes of " + totalSize + " bytes"); } } } ``` 在上述代码中,我们定义了一个名为 `OSSProgressCallback` 的类,该类实现了 `ProgressListener` 接口。在 `progressChanged` 方法中,我们判断事件类型是否为 `REQUEST_BYTE_TRANSFER_EVENT`,如果是,则表示已上传的字节数发生了变化,我们就可以计算出当前上传进度并输出。 在 Spring Boot 控制器中调用 `uploadFileToOSS` 方法,并传入上传进度回调函数: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @RestController public class OSSController { private final OSSService ossService; @Autowired public OSSController(OSSService ossService) { this.ossService = ossService; } @PostMapping("/upload") public String uploadFile(@RequestParam("file") MultipartFile file) throws IOException { String bucketName = "<yourBucketName>"; String objectName = "<yourObjectName>"; // 计算文件大小 long fileSize = file.getSize(); // 创建上传进度回调函数 ProgressCallback progressCallback = new OSSProgressCallback(fileSize); // 上传文件到 OSS ossService.uploadFileToOSS(file, bucketName, objectName, progressCallback); return "File uploaded successfully!"; } } ``` 需要注意的是,这里需要先注入一个阿里云 OSS 客户端对象,示例代码中使用了构造函数注入的方式。另外,需要替换代码中的 `bucketName` 和 `objectName` 参数为自己阿里云账号的信息。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值