阿里云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";
/**
* 是否已初始化