首先第一步也是必不可少的一步,引入aliyun的依赖:
com.aliyun.oss aliyun-sdk-oss joda-time joda-time然后在Application配置文件中配置相关的信息:
#阿里云 oss服务
#不同的服务器,地址不同
aliyun:
oss:
file:
endpoint: XXXX #地域节点
keyid: XXXX #id
keysecret: XXXX #KeySecret密钥
#bucket可以在控制台创建也可以在java代码创建
bucketname: XXXX #bucket名称
创建一个实体类用来读取配置文件中的信息:
@Component //把当前实体类交给Spring管理
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_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;
}
}
接下来就可以编写具体的方法了
@Override
public String uploadFileAvatar(MultipartFile file) {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(ConstantPropertiesUtils.END_POINT, ConstantPropertiesUtils.ACCESS_KEY_ID, ConstantPropertiesUtils.ACCESS_KEY_SECRET);
try {
// 上传文件流。
InputStream inputStream = file.getInputStream();
/*第一个参数 bucket名称*/
/*第二个参数 上传到oss文件路径和文件名称 日期+UUID +file.getOriginalFilename()得到文件的原始名称 : 避免因为文件名称相同而覆盖的问题,并且把文件按照日期进行分类*/
/*第三个参数 文件输入流*/
/*把文件按照日期进行分类*/
String fileName = new DateTime().toString("yyyy/MM/dd")+"/"+(UUID.randomUUID().toString().replaceAll("-","")+file.getOriginalFilename());
ossClient.putObject(ConstantPropertiesUtils.BUCKET_NAME,fileName,inputStream);
// 关闭OSSClient。
ossClient.shutdown();
/*把上传成功之后的路径返回 需要把上传到阿里云oss的路径手动拼接出来*/
String url="https://"+ConstantPropertiesUtils.BUCKET_NAME+"."+ConstantPropertiesUtils.END_POINT+"/"+fileName;
/* https:// guli-xm.oss-cn-guangzhou . aliyuncs.com / UUID+文件名 */
return url;
}catch (Exception e){
e.printStackTrace();
return null;
}
}
然后在控制器中调用该方法
public ReturnJson uploadOssFile(MultipartFile file){
//获取上传文件MultipartFile
//返回上传到oss的路径
String url=ossService.uploadFileAvatar(file);
return ReturnJson.ok().data(“url”,url);
}