阿里云OSS使用
- 首先在使用之前请先确保你已经申请了阿里云的oss对象存储服务(如果没有请先申请)
- 请先获取到oss的 endpoint、keyid、keysecret、bucketname的值(每个人都不一样)
1、创建一个新的模块
配置文件为:
#服务名
spring.application.name=service-oss
server.port=8086
spring.profiles.active=dev
#阿里云oss配置 (以下信息替换成你自己的)
aliyun.oss.file.endpoint=***
aliyun.oss.file.keyid=***
aliyun.oss.file.keysecret=***
#bucket可以在控制台创建,也可以使用java代码创建
aliyun.oss.file.bucketname=***
2、创建utils、controller、service包 和 启动类
启动类为:
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) //配置启动类不加载数据库
@ComponentScan(basePackages = {"com.hscs"}) //扫描包
public class OssApplication {
public static void main(String[] args) {
SpringApplication.run(OssApplication.class, args);
}
}
3、在utils包下创建ConstantPropertiesUtlis类
@Component
public class ConstantPropertiesUtlis 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_POINT;
public static String KEY_ID;
public static String KEY_SECRET;
public static String BUCKET_NAME;
@Override
public void afterPropertiesSet() throws Exception {
END_POINT=endpoint;
KEY_ID=keyId;
KEY_SECRET=keySecret;
BUCKET_NAME=bucketName;
}
}
4、创建controller类
@Controller
@RequestMapping("oss/fileoss")
@CrossOrigin
public class OssController {
@Autowired
private OssService ossService;
/**
* 上传头像
* */
@PostMapping()
public R uploadFileOss(MultipartFile file){
String url=ossService.uploadFileAvatar(file);
return R.ok().data("url",url);
}
}
5、创建业务接口和实现接口类
//接口
public interface OssService {
String uploadFileAvatar(MultipartFile file);
}
//类
/**
* @author wmg
* 文件上传业务实现
*/
@Service
public class OssServiceImpl implements OssService {
@Override
public String uploadFileAvatar(MultipartFile file) {
String endpoint = ConstantPropertiesUtlis.END_POINT;
String accessKeyId = ConstantPropertiesUtlis.KEY_ID;
String accessKeySecret = ConstantPropertiesUtlis.KEY_SECRET;
String bucketName=ConstantPropertiesUtlis.BUCKET_NAME;
try{
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
//获取文件名称
String fileName = file.getOriginalFilename();
//在文件里面添加随机唯一的id值,避免名字重复造成文件覆盖
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
fileName=uuid+fileName;
//将文件按日期分类
String datePath = new DateTime().toString("yyyy/MM/dd");
fileName=datePath+"/"+fileName;
// 上传文件流。
InputStream inputStream = file.getInputStream();
//第一个参数为bucket名 第二个参数为上传文件路径
ossClient.putObject(bucketName, fileName, inputStream);
//将上传路径返回 https://home-school-communication.oss-cn-guangzhou.aliyuncs.com/image/1.jpg
String url="https://"+bucketName+"."+endpoint+"/"+fileName;
// 关闭OSSClient。
ossClient.shutdown();
return url;
}catch (Exception e){
System.out.println("图片上传失败!");
e.printStackTrace();
return null;
}
}
}