1、开通“对象存储OSS”服务
(1)申请阿里云账号
(2)实名认证
(3)开通“对象存储OSS”服务
(4)进入管理控制台
2、创建Bucket
3找到编码时需要用到的常量值
(1)endpoint (地址)
(2)bucketName (创建bucket定义的名字)
(3)accessKeyId(AccessKey中的id)
(4)accessKeySecret(AccessKey中的secret)
4创建maven项目
(1)导入依赖
<dependencies>
<!--aliyunOSS-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>2.8.3</version>
</dependency>
<dependencies>
(2)配置application.properties(填入3中的值)
(3)创建启动类
5实现文件上传
(1)从配置文件读取常量
创建常量读取工具类:ConstantPropertiesUtil.java
使用@Value读取application.properties里的配置内容
用spring的 InitializingBean 的 afterPropertiesSet 来初始化配置信息,这个方法将在所有的属性被初始化后调用。
package com.lnzero.oss.utils;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
//当项目一启动,spring接口,spring加载之后,执行接口中的一个方法
@Component
public class ConstantPropertiesUtil 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 ACCESS_KEY_ID;
public static String ACCESS_KEY_SECRET;
public static String BUCKET_NAME;
@Override
public void afterPropertiesSet() throws Exception {
END_POINT = endpoint;
ACCESS_KEY_ID = keyId;
ACCESS_KEY_SECRET = keySecret;
BUCKET_NAME = bucketName;
}
}
(2)创建Service接口:FileService.java
package com.lnzero.oss.service;
import org.springframework.web.multipart.MultipartFile;
public interface OssService {
//上传文件到oss
String uploadFileAvatar(MultipartFile file);
}
(3)创建FileService实现类FileServiceImpl实现类
package com.lnzero.oss.service.impl;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.lnzero.oss.service.OssService;
import com.lnzero.oss.utils.ConstantPropertiesUtil;
import org.joda.time.DateTime;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
import java.util.UUID;
@Service
public class OssServiceImpl implements OssService {
//上传文件到oss
@Override
public String uploadFileAvatar(MultipartFile file) {
//工具类取值
String endpoint = ConstantPropertiesUtil.END_POINT;
String accessKeyId =ConstantPropertiesUtil.ACCESS_KEY_ID;
String accessKeySecret = ConstantPropertiesUtil.ACCESS_KEY_SECRET;
String bucketName = ConstantPropertiesUtil.BUCKET_NAME;
try {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
//获取上传文件输入流
InputStream inputStream = file.getInputStream();
//获取文件名称
String fileName = file.getOriginalFilename();
//uuid
String uuid = UUID.randomUUID().toString();
fileName = fileName+uuid;
//获取日期
String datePath = new DateTime().toString("yyyy/MM/dd");
fileName=datePath+"/"+fileName;
// 调用方法实现上传
//第一个参数 Bucket名称
//第二个参数 上传到oss文件路径和文件名称 /aa/bb/1.png
//第三个参数 上传文件流
ossClient.putObject(bucketName, fileName, inputStream);
// 关闭OSSClient
ossClient.shutdown();
//把上传之后的文件路径返回
//需要把上传到阿里云oss路径手动拼接出来
String url = "https://"+bucketName+"."+endpoint+"/"+fileName;
return url;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
(4)创建controller:FileUploadController.java
package com.lnzero.oss.controller;
import com.lnzero.commonutils.R;
import com.lnzero.oss.service.OssService;
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;
@RestController
@RequestMapping("eduoss/fileoss")
@CrossOrigin
public class OssController {
@Autowired
private OssService ossService;
@PostMapping
public R uploadOssFile(MultipartFile file){
//获取上传文件
//返回上传文件的url
String url= ossService.uploadFileAvatar(file);
return R.ok().data("url",url);
}
}
总结构
注:来自b站前后端项目(谷粒学院)
【SpringBoot项目实战】 2020最新在线教育 spring boot分布式项目实战_哔哩哔哩_bilibili