阿里云oss:是一个分布式的文件服务系统,可以进行图片(视频)的上传和下载

首先要有自己的阿里云账号,登录之后搜索对象存储oss

 

这个时候我们需要开通一下oss,开通之后进入oss控制台,然后需要创建Bucket(类似于文件夹,用于存储我们的图片等信息)

 这个时候bucket列表里面就会有我们刚才创建的bucket:

 那下面就使用springboot来整合oss,完成图片(视频)的上传和下载:

注意:调用oss也需要accessKey和secret

 我们先看下官方提供的接口文档:

可以看到安装的话就是引入相关依赖即可:

 初始化的相关代码也已经提供了:

 其他步骤就不一一看了,有兴趣的可以自己去阿里云官方查看文档,下面就开始整合:

新建一个springboot项目添加相关的依赖信息(由于我要使用swagger测试,因此也顺便加了一下swagger相关的依赖):

<!-- 阿里云oss依赖 -->
<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.10.2</version>
</dependency>
<!-- swagger -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

然后配置文件里面配置如下所示:主要是阿里云oss相关配置信息和文件上传大小配置

## oss param config
aliyun.oss.endpoint=oss-cn-hangzhou.aliyuncs.com
aliyun.oss.accessKeyId=xxxxxxxxxx
aliyun.oss.secret=xxxxxxxxxxxx
aliyun.oss.bucket=hanansheng
# 最大上传单个文件大小:默认1M
spring.servlet.multipart.max-file-size=1024MB
# 最大置总上传的数据大小 :默认10M
spring.servlet.multipart.max-request-size=1024MB

然后开始写controller代码:

 然后是service接口的定义:

最后是serviceImpl上传oss的代码:可以看到阿里云oss上传文件类型很多,这里我选择的是简单上传中的流式上传:

package com.example.ossboot.service.impl;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.ObjectMetadata;
import com.example.ossboot.service.FileService;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;

@Service
public class FileServiceImpl implements FileService {

    @Value("${aliyun.oss.endpoint}")
    private String endpoint;

    @Value("${aliyun.oss.accessKeyId}")
    private String accessKeyId;

    @Value("${aliyun.oss.secret}")
    private String secret;

    @Value("${aliyun.oss.bucket}")
    private String bucket;

    @Override
    public String upload(MultipartFile file) {
        // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写
        String endpoint = this.endpoint;
        // 阿里云账号AccessKey
        String accessKeyId = this.accessKeyId;
        String accessKeySecret = this.secret;
        // 填写Bucket名称
        String bucketName = this.bucket;

        try{
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            // 上传文件流
            InputStream inputStream= file.getInputStream();
            String fileName=file.getOriginalFilename();
            String uuid = UUID.randomUUID().toString().replaceAll("-","");
            fileName = uuid+fileName;

            //按照当前日期,创建文件夹,上传到创建文件夹里面
            //  2022/03/15/xx.jpg
            String timeUrl = new DateTime().toString("yyyy/MM/dd");
            fileName = timeUrl+"/"+fileName;
            // 调用方法实现上传
            ossClient.putObject(bucketName,fileName,inputStream);

            // 关闭ossclient
            ossClient.shutdown();

            // 上传之后文件路径
            String url="https://"+bucketName+"."+endpoint+"/"+fileName;
            return url;
        }catch (IOException e){
            e.printStackTrace();
            return null;
        }

    }
}

是不是感觉很简单。下面我通过swagger测试一下:

(1)上传图片测试:

 可以看到上传成功,并且返回上传后的图片路径:

https://hanansheng.oss-cn-hangzhou.aliyuncs.com/hy.jpg.crdownload

浏览器访问可以看到是可以访问得到的:

 并且oss里面也有了上传的图片信息:

 (2)上传视频测试:

 返回上传后视频地址:

https://hanansheng.oss-cn-hangzhou.aliyuncs.com/2022/03/15/20053aa41a494b5eb2b68dabb713188714.mp4

 浏览器访问:

 

 并且阿里云oss里面也是有的相关信息:

由于代码逻辑里面我以当前日期为文件夹来存储,所以如下:

 

 

  

自此,简单上传中的流式上传算是完成了,相关的demo已经上传csdn,有需要的可以下载:

springboot整合阿里云oss进行文件上传-Java文档类资源-CSDN下载

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐