1. 第一步:编写OSS的工具类
点击查看代码
aliyun:
oss:
keyid: 填写自己的
keysecret: 填写自己的
endpoint: 填写自己的
bucketname: 填写自己的
@Component
public class OSSUtils {
public String urlOSS(MultipartFile img{
//地域节点 --- id --- 密钥 --- 存储筒名称
String endpoint = AliYunOssClient.END_POINT;
String accessKeyId = AliYunOssClient.KEY_ID;
String accessKeySecret = AliYunOssClient.KEY_SECRET;
String bucketName = AliYunOssClient.BUCKET_NAME;
try {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder(.build(endpoint, accessKeyId, accessKeySecret;
//获取文件上传的输入流
InputStream inputStream = img.getInputStream(;
//获取文件名称
String Filename = img.getOriginalFilename(;
/**
* 1.解决上传同一文件而被新上传的覆盖,使用uuid进行拼接文件名使文件名唯一
* 2.解决上传文件分类问题,根据时间进行分类
*/
// 将uuid 转为string 并且把-去除
String uuid = UUID.randomUUID(.toString(.replaceAll("-","";
Filename = uuid + Filename;
/**
* 使用的依赖是:
* <dependency>
* <groupId>joda-time</groupId>
* <artifactId>joda-time</artifactId>
*</dependency>
* new DateTime(.toString(,toString(传入日期规则
* yyyy/MM-dd 形成 年为一个文件夹,月-日为一个文件夹
*/
org.joda.time.DateTime dateTime = new org.joda.time.DateTime(;
String date = dateTime.toString("yyyy/MM/dd";
String filePath = date+"/"+Filename;
/**
* 第一个参数 bucket名字
* 第二个参数 上传文件到阿里云OSS的文件路径和文件名称,filePath = path + fileName
* eg:/a/b/c.jpg
* 第三个参数 是文件输入流
*/
ossClient.putObject(bucketName,filePath,inputStream;
//关闭ossClient
ossClient.shutdown(;
String url = "https://"+bucketName+"."+endpoint+"/"+filePath;
//System.out.println("================="+url;
return url;
} catch (IOException e {
e.printStackTrace(;
return null;
}
}
}
2. OSS的属性
点击查看代码
@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss"
public class AliYunOssClient implements InitializingBean {
private String endPoint;
private String keyId;
private String keySecret;
private String bucketName;
public static String END_POINT;
public static String KEY_ID;
public static String KEY_SECRET;
public static String BUCKET_NAME;
//在给上面属性通过配置文件注入值之后,定义static变量,让外界直接用类名.的方式获取属性
//此方法在上面私有属性被注入值之后,可以执行下面的方法
@Override
public void afterPropertiesSet( throws Exception {
END_POINT = endPoint;
KEY_ID = keyId;
KEY_SECRET = keySecret;
BUCKET_NAME = bucketName;
}
}
3. 上传接口的Controller
点击查看代码
/**
* @author 胡铭阳
* @ClassNameUploadController
* @Authorhmy
* @date 2023/1/2 10:17
* @description:文件图片上传
*/
@CrossOrigin
@RestController
public class UploadController {
@Autowired
private OSSUtils ossUtils;
@PostMapping("/upload"
public ResponseResult uploadImg(MultipartFile img{
String s = ossUtils.urlOSS(img;
return ResponseResult.okResult(s;
}
}
4. service接口
点击查看代码
/**
* @author 胡铭阳
* @ClassNameUploadService
* @Authorhmy
* @date 2023/1/2 10:19
* @description:文件图片上传
*/
public interface UploadService {
/**
* 图片上传
* @param img:文件
* @return
*/
ResponseResult uploadImg(MultipartFile img;
}
5. Impl实现类
点击查看代码
/**
* @author 胡铭阳
* @ClassNameUploadServiceImpl
* @Authorhmy
* @date 2023/1/2 10:20
* @description
*/
@Service
public class UploadServiceImpl implements UploadService {
@Autowired
private OSSUtils ossUtils;
/**
* 图片上传
*
* @param img :文件
* @return
*/
@Override
public ResponseResult uploadImg(MultipartFile img {
String originalFilename = img.getOriginalFilename(;
if (originalFilename.equals(".png"||originalFilename.equals(".jpg"||originalFilename.equals(".GIF"||originalFilename.equals(".BMP"{
throw new SystemException(AppHttpCodeEnum.FILE_TYPE_ERROR;
}
String s = ossUtils.urlOSS(img;
return ResponseResult.okResult(s;
}
}