spring.profiles.active=dev
#阿里云 OSS
#不同的服务器,地址不同
aliyun.oss.file.endpoint=
aliyun.oss.file.keyid=
aliyun.oss.file.keysecret=
#bucket可以在控制台创建,也可以使用java代码创建
aliyun.oss.file.bucketname=
======================================================================
package com.nonglin.oss;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
/**
-
@Description :
-
@Author :lenovo
-
@Date :2021/3/6 18:02
*/
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@ComponentScan(basePackages={“com.nonglin”})
public class OssApplication {
public static void main(String[] args) {
SpringApplication.run(OssApplication.class, args);
}
}
===============================================================================
创建常量读取工具类:ConstantPropertiesUtil.java
使用@Value读取application.properties里的配置内容
用spring的 InitializingBean 的 afterPropertiesSet 来初始化配置信息,这个方法将在所有的属性被初始化后调用。
package com.nonglin.oss.utils;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
-
@Description :
-
@Author :lenovo
-
@Date :2021/3/6 19:31
*/
@Component
public class ConstantPropertiesUtils implements InitializingBean {
//读取配置文件内容
@Value(“${aliyun.oss.file.endpoint}”)
private String endpoint;
@Value(“${aliyun.oss.file.keyid}”)
private String keyId;
@Value(“${aliyun.oss.file.keysecret}”)
private String keySecret;
@Value(“${aliyun.oss.file.bucketname}”)
private String bucketName;
//定义公开的静态常量,在其他类中可以通过类名.属性的方式直接调用
public static String END_POIND;
public static String ACCESS_KEY_ID;
public static String ACCESS_KEY_SECRET;
public static String BUCKET_NAME;
@Override
public void afterPropertiesSet() throws Exception {
END_POIND = endpoint;
ACCESS_KEY_ID = keyId;
ACCESS_KEY_SECRET = keySecret;
BUCKET_NAME = bucketName;
}
}
=================================================================================
package com.nonglin.oss.controller;
import com.nonglin.commonutils.R;
import com.nonglin.oss.service.OssService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
/**
-
@Description :
-
@Author :lenovo
-
@Date :2021/3/6 19:42
*/
@Api(description=“文件上传”)
@RestController
@RequestMapping(“/eduoss/fileoss”)
@CrossOrigin//解决跨域问题
public class OssController {
@Autowired
private OssService ossService;
//上传头像的方法
@ApiOperation(value = “上传讲师头像”)
@PostMapping
public R uploadOssFile(MultipartFile file){
//获取上传文件,MultippartFile
//返回上传到oss路径
String url = ossService.uploadFileAvatar(file);
return R.ok().data(“url”,url);
}
}
=========================================================================
创建OssService接口及OssServiceImpl实现类
OssService接口:
package com.nonglin.oss.service;
import org.springframework.web.multipart.MultipartFile;
/**
-
@Description :
-
@Author :lenovo
-
@Date :2021/3/6 19:41
*/
public interface OssService {
String uploadFileAvatar(MultipartFile file);
}
OssServiceImpl实现类:
package com.nonglin.oss.service.impl;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.nonglin.oss.service.OssService;
import com.nonglin.oss.utils.ConstantPropertiesUtils;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
/**
-
@Description :
-
@Author :lenovo
-
@Date :2021/3/6 19:40
*/
@Service
public class OssServiceImpl implements OssService {
//上传头像到oss
public String uploadFileAvatar(MultipartFile file){
//工具类获取值
/* yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,
Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/
String endpoint = ConstantPropertiesUtils.END_POIND;
/*阿里云账号AccessKey拥有所有API的访问权限,风险很高。
强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。*/
String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;
String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET;
String bucketName = ConstantPropertiesUtils.BUCKET_NAME;
try{
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
//获取上传文件输入流
InputStream inputStream = file.getInputStream();
//获取文件名称
String fileName = file.getOriginalFilename();
//1、在文件名称里面添加随机唯一的值
String uuid = UUID.randomUUID().toString().replaceAll(“-”, “”);
fileName = uuid+fileName;//y526d5su01.ipg
//2、把文件按照日期进行分类
//获取当前日期
//2021/3/3
String datePath = new DateTime().toString(“yyyy/MM/dd”);
//拼接 2021/3/3/y526d5su01.ipg
fileName = datePath+“/”+fileName;
//拼接后的文件可以在阿里云oss中按照日期分类到不同文件夹中,避免了所有文件夹放到根目录下
//调用oss方法实现上传
//第一个参数 Bucket名称
//第二个参数 上传到oss文件路径和文件名称
//第三个参数 上传文件 输入流
ossClient.putObject(bucketName,fileName,inputStream);
// 关闭OSSClient。
ossClient.shutdown();
//把上传之后文件路径返回
//需要把上传到阿里云oss手动拼接出来
//上传后文件路径:
// https://edu03.oss-cn-beijing.aliyuncs.com/01.jpg
String url = “https://”+bucketName+“.”+endpoint+“/”+fileName;
return url;
}catch(Exception e) {
e.printStackTrace();
}
return null;
}
}
@value注解:将外部的值动态注入到Bean中