阿里云OSS对象存储上传文件java代码

OSS对象存储

OSS对象存储是专门用来存储图片视频文件等。

这里用阿里云实例

依赖

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

        <!-- 日期工具栏依赖 -->
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
        </dependency>

以SpringBoot为例:

第一步:先在资源文件中写上OSS各个属性,写在资源文件好维护。

aliyun:
  oss:
    access-key-id: 你的access-key-id
    access-key-secret: 你的access-key-secret
    bucket-domain: 你的bucket-domain
    bucket-name: 你的bucket-name
    end-point: 你的 end-point

第二步:写OSS类,用来取资源文件里OSS的值。

需要把类交给Spring来进行管理

// 实现Spring中的InitializingBean可以使该bean在进行初始化的时候执行afterPropertiesSet()方法来对属性进行赋值。
@Component
public class OssResources  implements InitializingBean {

    // 利用Spring中的@Value来进行取值, '${}'是spring中的表达式,key是资源文件中的key
    @Value("${aliyun.oss.end-point}")
    private String endPoint;

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

    @Value("${aliyun.oss.access-key-id}")
    private String accessKeyId;

    @Value("${aliyun.oss.access-key-secret}")
    private String accessKeySecret;

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

  	// OSS各个属性值
    public static String END_POINT;
    public static String BUCKET_NAME;
    public static String ACCESS_KEY_ID;
    public static String ACCESS_Key_SECRET;
    public static String BUCKET_DOMAIN;

    @Override
    public void afterPropertiesSet() throws Exception {
        END_POINT=endPoint;
        BUCKET_NAME=bucketName;
        ACCESS_KEY_ID=accessKeyId;
        ACCESS_Key_SECRET=accessKeySecret;
        BUCKET_DOMAIN=bucketDomain;
    }
}

第三步:在Service层写上具体的逻辑代码

@Override
    public String uploadTeacherAvatar(MultipartFile file) {
      	// 取值
        String endpoint = OssResources.END_POINT;
        String accessKeyId = OssResources.ACCESS_KEY_ID;
        String accessKeySecret = OssResources.ACCESS_Key_SECRET;
        String bucketName = OssResources.BUCKET_NAME;
      
      	// 创建OSS实例
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        try {

            // 获取上传文件输入流
            InputStream inputStream = file.getInputStream();
            // 获取文件名称
            String fileName = file.getOriginalFilename();
            // 在文件名称里面添加随机唯一的值,避免文件覆盖
            String uuid = UUID.randomUUID().toString().replace("-", "");
            fileName=uuid+fileName;
            // 把文件按照日期进行分类
            // 获取当前日期,给日期格式化,可以使文件以2021/3/11分类
            String dateTime = new DateTime().toString("yyyy/MM/dd");
            // 拼接
            fileName=dateTime+"/"+fileName;
            // 调用oss方法实现上传
            // 第一个参数  Bucket名称
            // 第二个参数  上传到oss文件路径和文件名称   aa/bb/1.jpg
            // 第三个参数  上传文件输入流
            ossClient.putObject(bucketName,fileName,inputStream);
            // 把上传后的路径返回存到数据库
            String url = "https://"+bucketName+"."+endpoint+"/"+fileName;
            return url;
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            // 关闭OSSClient数据源
            ossClient.shutdown();
        }
        return null;
    }

第四步:在controller层获取文件,获取文件参数需要使用MultipartFile,并且文件大小不易过大。

自定义上传文件大小

spring:
  servlet:
      multipart:
        max-file-size: 5MB  # 单个文件上传的最大值
        max-request-size: 10MB  # 请求上传文件的最大值(相当于上传多个文件的最大值)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值