springboot 阿里云 oss 文件上传

本文介绍了如何使用SpringBoot实现阿里云OSS文件上传,包括前置条件如设置公共读写权限和跨域配置,OSS的yml配置与配置文件读取,核心类的创建,文件直传及回调设置,并讨论了可能出现的异常情况和解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

阿里云OSS 文件上传

前置条件

  • oss 读写权限 应是公共读
  • Bucket ,Endpoint 应该是外网可访问
  • 回调地址应该是外网可访问 ,当然也可以不设置

跨域设置

OSS 配置

yml配置

aliyun:
  oss:
    basic-url: stcoool/
    endpoint: oss-cn-chengdu.aliyuncs.com
    bucket-name: stcoool
    access-key-id: 
    access-key-secret: 
    callback-url: https://tlsk-user.utools.club/oss/call
    file-min: 0
    file-max: 200

读取配置文件


import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;


@Component
@Data
@ConfigurationProperties(prefix = "aliyun.oss")
public class AliyunOssProperties {
   
    /**
     * bucket名字
     */
    private String bucketName;
    /**
     * endpoint名字  示例 :oss-cn-chengdu.aliyuncs.com
     */
    private String endpoint;
    /**
     * 阿里云文件基本路径 示例:stcoool/
     */
    private String basicUrl;
    /**
     * accessKeyId
     */
    private String accessKeyId;
    /**
     * accessKeySecret
     */
    private String accessKeySecret;
    //以下是配置 web 直接上传到oss
    /**
     * 上传到阿里云oss后的回调地址(需外网可访问) 示例 :https://tlsk-user.utools.club/oss/call
     */
    private String callbackUrl;
    /**
     * 失效时间:web直接上传到oss policy 失效时间(单位:秒)
     */
    private long expireTime;
    /**
     * 文件大小(最小:MB)
     */
    private long fileMin;
    /**
     * 文件大小(最大:MB)
     */
    private long fileMax;


}

核心类

用户上传文件 -> 服务器 ->OSS
用户上传文件 ->OSS



import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.utils.BinaryUtil;
import com.aliyun.oss.model.*;
import lombok.Data;
import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Date;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author: SUNKUN
 */
@Data
@NonNull
@Slf4j
@Component
public class AliyunOss {
   
    /**
     * 修改头像
     */
    public final static Integer ACTION_UPDATE_AVATAR=1;
    /**
     *     <dependency>
     *       <groupId>com.aliyun.oss</groupId>
     *       <artifactId>aliyun-sdk-oss</artifactId>
     *       <version>3.10.2</version>
     *     </dependency>
     *
     *     Bucket读写权限需设置为公共读,否则根据链接无法查看数据
     */
    /**
     * 阿里云 BucketName
     */
    private String bucketName;
    /**
     * 阿里云 Endpoint (外网) 示例: oss-cn-chengdu.aliyuncs.com
     */
    private String endpoint;
    /**
     * 阿里云文件路径 示例: stcoool/47b6241a22894164ab4bc7e09bcdecfc.png
     */
    private String objectName;
    /**
     * accessKeyId
     */
    private String accessKeyId;
    /**
     * accessKeySecret
     */
    private String accessKeySecret;
    /**
     * 阿里云文件url地址
     * bucketName,endpoint,objectName
     */
    private final static String MODEL="https://%s.%s/%s";
    /**
     * 是否已初始化
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值